# Tal i javascript
*
author: krm
created: 2018-09-27  
status: alpha
*

# 👁️‍🗨️ Om hur js hanterar tal

Till skilnnad ifrån många andra språk finns det bara en typ för tal i js, men tal kan ändå ställa till många problem.

- Många av exemplerna på hur dåligt js är kommer ifrån konstiga tal konverteringar.
- Tal kan ge upphov till egendomliga avrundningsfel och detta är inbyggd i js.
- Vi försöker här undersöka vad tal är och ovanstånde problem.

# ❓ Om hur js hanterar tal

Till skilnnad ifrån många andra språk finns det bara en typ för tal i js, men tal kan ändå ställa till många problem.

- Många av exemplerna på hur dåligt js är kommer ifrån konstiga tal konverteringar.
- Tal kan ge upphov till egendomliga avrundningsfel och detta är inbyggd i js.
- Vi försöker här undersöka vad tal är och ovanstånde problem.

# 🤔 Vad är Number?

Number är datypen för tal i javascript.

- Number är ett flyttal("float point numbers").
- Det betyder förenklat att Number är ett decimaltal.
- Består av 64 bits

# 📣 Några kommentar om Numbers

Number beter sig oftast "snällt", men det finns tillfällen då datorns 
implementering av Number har betydelse.

- Representerar heltal upp till 15 siffror korrekt. 
-9999999999999998+1*
- Avrundning fel för decimaltal kan förekomma. *0.2+0.1*

Obs! Dessa problem är inget unikt för js utan finns i alla språk när du 
använder dig av flyttal.

# 🚜 Vad använder vi då Number till?

Efter som det inte finns någon anna tal typ av nder vi det till allt.

- Beräkningar, även krävande.
- Men vi kan försöka att använda bara heltal för att undvika problem.
- Hålla ordning på saker, nummera olika ting.

# 🀄️ Hur ser det ut i andra språk?

I många nadra språk så som C, C00, C#, java med flera skiljer man på 
olika typer av tal.

- Det finns *double* eller *float* för flytal.
- Och *int* med flera för heltal.
- Antalet byte kan skilja mellan olika typer av tal.
- Att optimera minnes användingen kan vara en viktig del.

# Vad är NaN?

NaN är ett speciall siffra som används i js för att säga att detta är 
inget tal.

- NaN är förkortning av "Not a Number"
- typeof NaN === "number"
- Number("abc") === NaN
- -NaN
- NaN\*NaN+3

# Vad är Infinity?

Infinity är ett speciall siffra som används i js för att säga att detta 
är resultatet av en odefinerad beräkning. Infinit kan ha posetivt eller 
negativt tecken.

- typeof Infinity === "numbers"
- 1/0
- -5/(5-5)
- Infinity+Infinity* *Infinity*Infinity
- OBS! *Infinity-Infinity===NaN*

# 🔄 Att konvertera till ett Number.

För att  konvertera till ett Number använder vi funktionen Number().

- Number(5) Tips: Du kan nu använda de inbyggda funktionerna för Number.
- Number("5") - *Number("3.14")* - *Number("555.555")*
- Number("-5")
- Dessa är NaN: *Number("5/5")* *Number("One")*

# 🔄 Konvertera mera

Det finns några egendomliga som uppkommer pga. ovanliga Number 
konverteringar.

- Number({}) === NaN
- Number([]) === 0
- Number(true) === 1
- Number(false) === 0

Konverteringen av booleans är logisk eftersom det är de värden som true 
och false har i matematiken.

# 🔬 Hur vet vi om något är ett nummer?

Det finns flera sätt att göra detta på.

- isNaN är sant om parameter inte är ett tal. Används tillsammans med inte operatorn "!".
  - !isNaN(5) *isNaN("Hello")*
- isFinite är sant om parametern är ett tal och inte är "Infinity".
  - isFinite(5) *isFinite(Infinity)*
- isInterger sant om parametern är ett heltal.
  - isInteger(5) *isInteger(3.14)* 

# 👿 Förvånande avrundningar

Avrundningar kan ställa till problem.

- 0.1+0.2

# Vad använder vi för funktioner

Vi får dem ifrån Math

- sin, cos
