Modernà JavaScript obsahuje dva druhy ÄÃsel:
-
BÄžná ÄÃsla v JavaScriptu jsou uložena v 64-bitovém formátu IEEE-754. Jsou známa také jako âÄÃsla s pohyblivou Åádovou Äárkou s dvojnásobnou pÅesnostÃâ. To jsou ÄÃsla, která použÃváme ve vÄtÅ¡inÄ pÅÃpadů a v této kapitole o nich budeme hovoÅit.
-
ÄÃsla typu BigInt pÅedstavujà celá ÄÃsla libovolné délky. Jsou nÄkdy zapotÅebÃ, neboÅ¥ bÄžné celé ÄÃslo nemůže bezpeÄnÄ pÅekroÄit
(253-1)nebo být menšà než-(253-1), jak jsme uvedli již dÅÃve v kapitole Datové typy. Jelikož biginty se použÃvajà jen v nÄkterých speciálnÃch oblastech, vÄnujeme jim zvláštnà kapitolu Typ BigInt.
Zde tedy budeme hovoÅit o bÄžných ÄÃslech. RozÅ¡iÅme si své znalosti o nich.
Dalšà způsoby, jak napsat ÄÃslo
PÅedstavme si, že musÃme napsat 1 miliardu. Obvyklý způsob je:
let miliarda = 1000000000;
Můžeme jako oddÄlovaÄ použÃt podtržÃtko _:
let miliarda = 1_000_000_000;
PodtržÃtko _ zde hraje roli âsyntaktického cukruâ, který Äinà ÄÃslo ÄitelnÄjÅ¡Ãm. Motor JavaScriptu podtržÃtka _ mezi ÄÃslicemi jednoduÅ¡e ignoruje, takže je to pÅesnÄ stejná miliarda jako výše uvedená.
V reálném životÄ se vÅ¡ak snažÃme vyhnout zápisu dlouhých sekvencà nul. Jsme na to pÅÃliÅ¡ lÃnÃ. SnažÃme se zapsat miliardu nÄjak jako "1 mld." nebo 7 miliard 300 miliónů jako "7,3 mld.". To platà pro vÄtÅ¡inu velkých ÄÃsel.
V JavaScriptu můžeme ÄÃslo zkrátit tÃm, že za nÄ pÅidáme pÃsmeno "e" a uvedeme poÄet nul:
let miliarda = 1e9; // 1 miliarda, doslova: 1 a 9 nul
alert( 7.3e9 ); // 7.3 miliard (totéž jako 7300000000 nebo 7_300_000_000)
Jinými slovy, e toto ÄÃslo násobà ÄÃslem 1 se zadaným poÄtem nul.
1e3 === 1 * 1000 // e3 znamená *1000
1.23e6 === 1.23 * 1000000 // e6 znamená *1000000
Nynà zapiÅ¡me nÄjaké velmi malé ÄÃslo. TÅeba 1 mikrosekundu (jednu milióntinu sekundy):
let mcs = 0.000001;
StejnÄ jako pÅedtÃm nám může pomoci použità "e". Jestliže se chceme vyhnout explicitnÃmu zápisu nul, můžeme zapsat totéž jako:
let mcs = 1e-6; // pÄt nul nalevo od 1
SpoÄÃtáme-li nuly v ÄÃsle 0.000001, bude jich 6. Je to tedy pÅirozenÄ 1e-6.
Jinými slovy, záporné ÄÃslo za "e" znamená dÄlenà ÄÃslem 1 se zadaným poÄtem nul:
// -3 znamená dÄlenà ÄÃslem 1 se 3 nulami
1e-3 === 1 / 1000; // 0.001
// -6 znamená dÄlenà ÄÃslem 1 se 6 nulami
1.23e-6 === 1.23 / 1000000; // 0.00000123
// pÅÃklad s vÄtÅ¡Ãm ÄÃslem
1234e-2 === 1234 / 100; // 12.34, desetinná Äárka se posune 2krát
HexadecimálnÃ, binárnà a oktálnà ÄÃsla
Hexadecimálnà ÄÃsla (v Å¡estnáctkové soustavÄ) se v JavaScriptu Å¡iroce použÃvajà k reprezentaci barev, kódovánà znaků a mnoha dalÅ¡Ãm vÄcem. PochopitelnÄ tedy existuje kratšà způsob, jak je zapsat: 0x a pak ÄÃslo.
NapÅÃklad:
alert( 0xff ); // 255
alert( 0xFF ); // 255 (totéž, malá a velká pÃsmena se nerozliÅ¡ujÃ)
Binárnà (dvojková) a oktálnà (osmiÄková) soustava se použÃvajà jen vzácnÄ, ale jsou také podporovány, a to za použità prefixů 0b a 0o:
let a = 0b11111111; // binárnà podoba 255
let b = 0o377; // oktálnà podoba 255
alert( a == b ); // true, stejné ÄÃslo 255 na obou stranách
Takovou podporu majà pouze tÅi ÄÃselné soustavy. Pro jiné ÄÃselné soustavy bychom mÄli použÃt funkci parseInt (kterou uvidÃme pozdÄji v této kapitole).
toString(základ)
Metoda ÄÃslo.toString(základ) vrátà ÅetÄzcovou reprezentaci ÄÃsla ÄÃslo v ÄÃselné soustavÄ o zadaném základu základ.
PÅÃklad:
let ÄÃslo = 255;
alert( ÄÃslo.toString(16) ); // ff
alert( ÄÃslo.toString(2) ); // 11111111
Hodnota základ může být od 2 do 36. StandardnÄ je to 10.
BÄžná použità jsou:
-
základ=16 se použÃvá pro hexadecimálnà barvy, kódovánà znaků atd., ÄÃslice mohou být
0..9neboA..F. -
základ=2 sloužà zejména pro ladÄnà bitových operacÃ, ÄÃslice mohou být
0nebo1. -
základ=36 je maximum, ÄÃslice mohou být
0..9neboA..Z. K reprezentaci ÄÃsla se použÃvá celá latinská abeceda. LegraÄnÃ, ale užiteÄné využitÃ36pÅedstavuje pÅÃpad, kdy potÅebujeme zmÄnit dlouhý ÄÃselný identifikátor na nÄco kratÅ¡Ãho, napÅÃklad abychom vytvoÅili kratšà URL. Můžeme jej snadno reprezentovat v ÄÃselné soustavÄ o základu36:alert( 123456..toString(36) ); // 2n9c
ProsÃme vÅ¡imnÄte si, že dvÄ teÄky v 123456..toString(36) nenà pÅeklep. Chceme-li volat metodu pÅÃmo na ÄÃsle, napÅ. toString v uvedeném pÅÃkladu, pak za ÄÃslo musÃme umÃstit dvÄ teÄky ...
Kdybychom umÃstili jedinou teÄku: 123456.toString(36), nastala by chyba, protože syntaxe JavaScriptu oÄekává za prvnà teÄkou desetinnou Äást. Když vÅ¡ak uvedeme dalšà teÄku, JavaScript pozná, že desetinná Äást je prázdná, a nynà použije metodu.
ZaokrouhlovánÃ
Jedna z nejÄastÄji použÃvaných operacà pÅi práci s ÄÃsly je zaokrouhlovánÃ.
Pro zaokrouhlovánà existuje nÄkolik vestavÄných funkcÃ:
Math.floor- Zaokrouhluje dolů:
3.1se zaokrouhlà na3,-1.1se zaokrouhlà na-2. Math.ceil- Zaokrouhluje nahoru:
3.1se zaokrouhlà na4,-1.1se zaokrouhlà na-1. Math.round- Zaokrouhluje na nejbližšà celé ÄÃslo:
3.1se zaokrouhlà na3,3.6se zaokrouhlà na4. V prostÅednÃch pÅÃpadech se3.5zaokrouhlà nahoru na4a-3.5se zaokrouhlà nahoru na-3. Math.trunc(nenà podporována v Internet Exploreru)- Odstranà vÅ¡e za desetinnou Äárkou bez zaokrouhlenÃ:
3.1se pÅevede na3,-1.1se pÅevede na-1.
RozdÃly mezi tÄmito funkcemi shrnuje následujÃcà tabulka:
Math.floor |
Math.ceil |
Math.round |
Math.trunc |
|
|---|---|---|---|---|
3.1 |
3 |
4 |
3 |
3 |
3.5 |
3 |
4 |
4 |
3 |
3.6 |
3 |
4 |
4 |
3 |
-1.1 |
-2 |
-1 |
-1 |
-1 |
-1.5 |
-2 |
-1 |
-1 |
-1 |
-1.6 |
-2 |
-1 |
-2 |
-1 |
Tyto funkce pokrývajà vÅ¡echny možné způsoby zacházenà s desetinnou Äástà ÄÃsla. Ale co když chceme zaokrouhlit ÄÃslo na n-tou ÄÃslici za desetinnou Äárkou?
Máme napÅÃklad 1.2345 a chceme toto ÄÃslo zaokrouhlit na 2 desetinná mÃsta, abychom dostali jen 1.23.
Existujà dva způsoby, jak to udÄlat:
-
Násobit a dÄlit.
Abychom napÅÃklad zaokrouhlili ÄÃslo na 2. ÄÃslici za desetinnou Äárkou, můžeme toto ÄÃslo vynásobit
100, zavolat zaokrouhlovacà funkci a pak je znovu vydÄlit.let ÄÃslo = 1.23456; alert( Math.round(ÄÃslo * 100) / 100 ); // 1.23456 -> 123.456 -> 123 -> 1.23 -
Metoda toFixed(n) zaokrouhluje ÄÃslo na
nÄÃslic za desetinnou Äárkou a vracà ÅetÄzcovou reprezentaci výsledku.let ÄÃslo = 12.34; alert( ÄÃslo.toFixed(1) ); // "12.3"Zaokrouhlà ÄÃslo nahoru nebo dolů na nejbližšà hodnotu, podobnÄ jako
Math.round:let ÄÃslo = 12.36; alert( ÄÃslo.toFixed(1) ); // "12.4"VÅ¡imnÄte si, že výsledkem
toFixedje ÅetÄzec. Je-li desetinná Äást ÄÃsla kratÅ¡Ã, než bylo vyžadováno, na konec se pÅidajà nuly:let ÄÃslo = 12.34; alert( ÄÃslo.toFixed(5) ); // "12.34000", pÅidajà se nuly, aby ÄÃslic bylo pÅesnÄ 5Můžeme jej pÅevést na ÄÃslo pomocà unárnÃho plus nebo volánÃ
Number(), napÅ. napsat+ÄÃslo.toFixed(5).
NepÅesné výpoÄty
ÄÃslo je vnitÅnÄ reprezentováno v 64-bitovém formátu IEEE-754, takže se ukládá pÅesnÄ do 64 bitů: 52 z nich se použÃvá k uloženà ÄÃslic, v 11 z nich je uložena pozice desetinné Äárky a 1 bit je pro znaménko.
Je-li ÄÃslo opravdu velké, může toto 64-bitové úložiÅ¡tÄ pÅekroÄit a stát se speciálnà ÄÃselnou hodnotou Infinity (nekoneÄno):
alert( 1e500 ); // Infinity
Co může být trochu ménÄ zÅejmé, ale stává se pomÄrnÄ Äasto, je ztráta pÅesnosti.
Uvažujme tento (nepravdivý!) test rovnosti:
alert( 0.1 + 0.2 == 0.3 ); // false
Je to tak. Jestliže ovÄÅÃme, zda souÄet 0.1 a 0.2 je 0.3, dostaneme false.
ZvláštnÃ! Co tedy je, když ne 0.3?
alert( 0.1 + 0.2 ); // 0.30000000000000004
Ouvej! PÅedstavme si, že vytváÅÃme elektronický obchod a návÅ¡tÄvnÃk si do koÅ¡Ãku uložà zbožà za $0.10 a za $0.20. Celková cena pak bude $0.30000000000000004. To každého pÅekvapÃ.
Ale proÄ se to dÄje?
ÄÃslo je v pamÄti uloženo ve své binárnà podobÄ, jako posloupnost bitů â jedniÄek a nul. Ale desetinná ÄÃsla jako 0.1 nebo 0.2, která v desÃtkové soustavÄ vypadajà jednoduÅ¡e, jsou ve své binárnà podobÄ ve skuteÄnosti nekoneÄná.
alert(0.1.toString(2)); // 0.0001100110011001100110011001100110011001100110011001101
alert(0.2.toString(2)); // 0.001100110011001100110011001100110011001100110011001101
alert((0.1 + 0.2).toString(2)); // 0.0100110011001100110011001100110011001100110011001101
Co je vlastnÄ 0.1? Je to jedna dÄleno deseti 1/10, jedna desetina. V desÃtkové soustavÄ lze taková ÄÃsla snadno reprezentovat. Srovnejme si to s jednou tÅetinou: 1/3. Z nà se stane nekoneÄné desetinné ÄÃslo 0.33333(3).
Je tedy zaruÄeno, že dÄlenà mocninami 10 bude v desÃtkové soustavÄ fungovat dobÅe, ale dÄlenà tÅemi ne. Ze stejného důvodu je v binárnà soustavÄ zaruÄeno, že bude fungovat dÄlenà mocninami 2, ale z 1/10 se stane nekoneÄné binárnà ÄÃslo.
V binárnà soustavÄ prostÄ neexistuje způsob, jak uložit pÅesnÄ 0,1 nebo pÅesnÄ 0,2, stejnÄ jako v desÃtkové soustavÄ nenà způsob, jak uložit jako desetinné ÄÃslo jednu tÅetinu.
ÄÃselný formát IEEE-754 to Åešà zaokrouhlenÃm na nejbližšà možné ÄÃslo. Tato zaokrouhlovacà pravidla nám bÄžnÄ neumožÅujà vidÄt tuto âdrobnou ztrátu pÅesnostiâ, ale ta tam je.
Můžeme to vidÄt v akci:
alert( 0.1.toFixed(20) ); // 0.10000000000000000555
A když seÄteme dvÄ ÄÃsla, jejich âztráty pÅesnostiâ se seÄtou.
Proto 0.1 + 0.2 nenà pÅesnÄ 0.3.
Stejný problém existuje v mnoha jiných programovacÃch jazycÃch.
PÅesnÄ stejný výsledek vydajà i PHP, Java, C, Perl nebo Ruby, protože jsou založeny na stejném ÄÃselném formátu.
Můžeme se tomuto problému vyhnout? JistÄ. NejspolehlivÄjšà metoda je zaokrouhlit výsledek pomocà metody toFixed(n):
let souÄet = 0.1 + 0.2;
alert( souÄet.toFixed(2) ); // "0.30"
ProsÃme vÅ¡imnÄte si, že toFixed vracà vždy ÅetÄzec. Zajišťuje, že za desetinnou teÄkou má vždy 2 ÄÃslice. To se obzvláštÄ hodÃ, když máme elektronický obchod a potÅebujeme zobrazit $0.30. V jiných pÅÃpadech můžeme použÃt unárnà plus, abychom ÅetÄzec pÅevedli na ÄÃslo:
let souÄet = 0.1 + 0.2;
alert( +souÄet.toFixed(2) ); // 0.3
Můžeme také doÄasnÄ násobit tato ÄÃsla 100 (nebo vyššÃm ÄÃslem), abychom z nich vytvoÅili celá ÄÃsla, provést výpoÄty a pak je znovu vydÄlit. Pak, jelikož provádÃme výpoÄty s celými ÄÃsly, chyba se trochu snÞÃ, ale pÅi dÄlenà ji stále dostaneme:
alert( (0.1 * 10 + 0.2 * 10) / 10 ); // 0.3
alert( (0.28 * 100 + 0.14 * 100) / 100); // 0.4200000000000001
Použità násobenà a dÄlenà tedy chybu zredukuje, ale úplnÄ ji neodstranÃ.
NÄkdy se snažÃme úplnÄ se desetinným ÄÃslům vyhnout. NapÅÃklad když vytváÅÃme obchod, můžeme ukládat ceny v centech namÃsto v dolarech. Ale co když aplikujeme slevu 30%? V praxi je úplné vyhnutà se desetinným ÄÃslům možné jen zÅÃdka. ProstÄ je zaokrouhlujte, abyste odÅÃzli âzbytkyâ, když je tÅeba.
Zkuste si spustit tohle:
// Ahoj! Já jsem samozvyÅ¡ujÃcà se ÄÃslo!
alert( 9999999999999999 ); // zobrazà 10000000000000000
To trpà stejným neduhem: ztrátou pÅesnosti. Pro ÄÃslo je 64 bitů, 52 z nich lze použÃt k uloženà ÄÃslic, ale to nestaÄÃ. NejménÄ významné ÄÃslice tedy zmizÃ.
JavaScript pÅi takových událostech nevyvolá chybu. UdÄlá, co může, aby se ÄÃslo veÅ¡lo do požadovaného formátu, ale naneÅ¡tÄstà tento formát nenà dostateÄnÄ velký.
DalÅ¡Ãm legraÄnÃm důsledkem této internà reprezentace ÄÃsel je existence dvou nul: 0 a -0.
Je to proto, že znaménko je reprezentováno jediným bitem, který může být nastaven na 1 nebo 0 pro jakékoli ÄÃslo vÄetnÄ nuly.
Ve vÄtÅ¡inÄ pÅÃpadů je tento rozdÃl neznatelný, protože operátory jsou vytvoÅeny tak, aby s obÄma nulami zacházely stejnÄ.
Testy: isFinite a isNaN
VzpomÃnáte si na tyto dvÄ speciálnà ÄÃselné hodnoty?
Infinity(a-Infinity) je speciálnà ÄÃselná hodnota, která je vÄtšà (menÅ¡Ã) než cokoli jiného.NaNpÅedstavuje chybu.
PatÅà k typu number, ale nejsou to ânormálnÃâ ÄÃsla, takže existujà speciálnà funkce, které je provÄÅÃ:
-
isNaN(hodnota)pÅevede svůj argument na ÄÃslo a pak jej otestuje, zda jeNaN:alert( isNaN(NaN) ); // true alert( isNaN("ÅetÄzec") ); // trueAle potÅebujeme vůbec tuto funkci? Nemůžeme jednoduÅ¡e použÃt porovnánÃ
=== NaN? Bohužel ne. HodnotaNaNje unikátem, který se nerovná niÄemu jinému, dokonce ani sám sobÄ:alert( NaN === NaN ); // false -
isFinite(hodnota)pÅevede svůj argument na ÄÃslo a vrátÃtrue, jestliže je to skuteÄné ÄÃslo a neNaN/Infinity/-Infinity:alert( isFinite("15") ); // true alert( isFinite("ÅetÄzec") ); // false, protože je to speciálnà hodnota: NaN alert( isFinite(Infinity) ); // false, protože je to speciálnà hodnota: Infinity
NÄkdy se isFinite použÃvá k ovÄÅenÃ, zda ÅetÄzcová hodnota je skuteÄné ÄÃslo:
let ÄÃslo = +prompt("Zadejte ÄÃslo", '');
// bude true, pokud nezadáte Infinity, -Infinity nebo nÄco jiného než ÄÃslo
alert( isFinite(ÄÃslo) );
ProsÃme vÅ¡imnÄte si, že s prázdným ÅetÄzcem nebo s ÅetÄzcem složeným pouze z mezer se zacházà jako s 0 ve vÅ¡ech ÄÃselných funkcÃch vÄetnÄ isFinite.
Number.isNaN a Number.isFiniteMetody Number.isNaN a Number.isFinite jsou âstriktnÄjÅ¡Ãâ verze funkcà isNaN a isFinite. Svůj argument nepÅevádÄjà automaticky na ÄÃslo, ale mÃsto toho ovÄÅÃ, zda jejich argument je typu number.
-
Number.isNaN(hodnota)vracÃtrue, jestliže argument je typunumbera jeNaN. V jakémkoli jiném pÅÃpadÄ vracÃfalse.alert( Number.isNaN(NaN) ); // true alert( Number.isNaN("ÅetÄzec" / 2) ); // true // VÅ¡imnÄte si rozdÃlu: alert( Number.isNaN("ÅetÄzec") ); // false, protože "ÅetÄzec" je typu string, ne typu number alert( isNaN("ÅetÄzec") ); // true, protože isNaN pÅevede "ÅetÄzec" na ÄÃslo a jako výsledek této konverze zÃská NaN -
Number.isFinite(value)vracÃtrue, jestliže argument je typunumbera nenÃNaN/Infinity/-Infinity. V jakémkoli jiném pÅÃpadÄ vracÃfalse.alert( Number.isFinite(123) ); // true alert( Number.isFinite(Infinity) ); // false alert( Number.isFinite(2 / 0) ); // false // VÅ¡imnÄte si rozdÃlu: alert( Number.isFinite("123") ); // false, protože "123" je typu string, ne typu number alert( isFinite("123") ); // true, protože isFinite pÅevede ÅetÄzec "123" na ÄÃslo 123
Svým způsobem jsou Number.isNaN a Number.isFinite jednoduššà a pÅÃmÄjšà než funkce isNaN a isFinite. V praxi se vÅ¡ak vÄtÅ¡inou použÃvajà isNaN a isFinite, jelikož jsou kratšà na napsánÃ.
Object.isExistuje speciálnà vestavÄná metoda Object.is, která porovnává hodnoty stejnÄ jako ===, ale ve dvou krajnÃch pÅÃpadech je spolehlivÄjÅ¡Ã:
- Funguje pro
NaN:Object.is(NaN, NaN) === true, což je dobrá vÄc. - Hodnoty
0a-0jsou rozdÃlné:Object.is(0, -0) === false, technicky je to správnÄ, protože vnitÅnÄ ÄÃslo obsahuje znaménkový bit, který se může liÅ¡it, i když jsou vÅ¡echny ostatnà bity nulové.
Ve vÅ¡ech ostatnÃch pÅÃpadech je Object.is(a, b) totéž jako a === b.
Metodu Object.is zde zmiÅujeme proto, že se Äasto použÃvá ve specifikaci JavaScriptu. Když internà algoritmus potÅebuje porovnat, zda jsou dvÄ hodnoty pÅesnÄ stejné, použÃvá Object.is (internÄ nazvanou SameValue).
parseInt a parseFloat
ÄÃselná konverze provádÄná pomocà plus + nebo Number() je striktnÃ. NenÃ-li hodnota pÅesnÄ ÄÃslo, konverze selže:
alert( +"100px" ); // NaN
Jedinou výjimkou jsou mezery na zaÄátku nebo na konci ÅetÄzce, které jsou ignorovány.
V reálném životÄ vÅ¡ak Äasto máme hodnoty s jednotkami, napÅ. "100px" nebo "12pt" v CSS. NavÃc v mnoha zemÃch se symbol mÄny pÃÅ¡e až za Äástku, takže máme "19â¬" a rádi bychom z toho zÃskali ÄÃselnou hodnotu.
K tomu sloužà funkce parseInt a parseFloat.
âNaÄÃtajÃâ ÄÃslo z ÅetÄzce tak dlouho, dokud to jde. Jakmile nastane chyba, vrátà nahromadÄné ÄÃslo. Funkce parseInt vrátà celé ÄÃslo, zatÃmco parseFloat vrátà ÄÃslo s pohyblivou Åádovou Äárkou:
alert( parseInt('100px') ); // 100
alert( parseFloat('12.5em') ); // 12.5
alert( parseInt('12.3') ); // 12, vrátà se jen celá Äást
alert( parseFloat('12.3.4') ); // 12.3, druhá teÄka ukonÄà naÄÃtánÃ
Existujà situace, v nichž parseInt/parseFloat vrátà NaN. To se stane tehdy, když nelze naÄÃst ani jednu ÄÃslici:
alert( parseInt('a123') ); // NaN, prvnà znak tento proces zastavÃ
parseInt(ÅetÄzec, soustava)Funkce parseInt() má nepovinný druhý parametr. Ten specifikuje základ ÄÃselné soustavy, takže parseInt může také naÄÃtat ÅetÄzce s hexadecimálnÃmi ÄÃsly, binárnÃmi ÄÃsly a podobnÄ:
alert( parseInt('0xff', 16) ); // 255
alert( parseInt('ff', 16) ); // 255, funguje to i bez 0x
alert( parseInt('2n9c', 36) ); // 123456
Dalšà matematické funkce
JavaScript má vestavÄný objekt Math, který obsahuje malou knihovnu matematických funkcà a konstant.
NÄkolik pÅÃkladů:
Math.random()-
Vrátà náhodné ÄÃslo od 0 do 1 (kromÄ 1).
alert( Math.random() ); // 0.1234567894322 alert( Math.random() ); // 0.5435252343232 alert( Math.random() ); // ... (jakákoli náhodná ÄÃsla) Math.max(a, b, c...)aMath.min(a, b, c...)-
Vrátà nejvÄtšà a nejmenšà z libovolného poÄtu argumentů.
alert( Math.max(3, 5, -10, 0, 1) ); // 5 alert( Math.min(1, 2) ); // 1 Math.pow(n, exponent)-
VrátÃ
numocnÄné na zadaný exponent.alert( Math.pow(2, 10) ); // 2 na 10 = 1024
V objektu Math jsou i dalšà konstanty a funkce vÄetnÄ goniometrických. Můžete je najÃt v dokumentaci k objektu Math.
ShrnutÃ
Abychom napsali ÄÃslo s mnoha nulami:
- PÅipojÃme za ÄÃslo
"e"a poÄet nul. NapÅÃklad123e6je totéž jako123s 6 nulami:123000000. - Záporné ÄÃslo za
"e"způsobÃ, že ÄÃslo bude dÄleno ÄÃslem 1 se zadaným poÄtem nul. NapÅÃklad123e-6znamená0.000123(123milióntin).
Pro různé ÄÃselné soustavy:
- Můžeme zapisovat ÄÃsla pÅÃmo v hexadecimálnà (
0x), oktálnà (0o) a binárnà (0b) soustavÄ. parseInt(ÅetÄzec, základ)pÅevedeÅetÄzecna celé ÄÃslo v ÄÃselné soustavÄ o zadaném základuzáklad,2 ⤠základ ⤠36.ÄÃslo.toString(základ)pÅevede ÄÃslo na ÅetÄzec v ÄÃselné soustavÄ o zadaném základuzáklad.
Pro testovánà ÄÃsel:
isNaN(hodnota)pÅevede svůj argument na ÄÃslo a pak testuje, zda jeNaNNumber.isNaN(hodnota)ovÄÅÃ, zda je jejà argument typunumber, a pokud ano, testuje, zda jeNaNisFinite(hodnota)pÅevede svůj argument na ÄÃslo a pak testuje, zda nenÃNaN/Infinity/-InfinityNumber.isFinite(hodnota)ovÄÅÃ, zda je jejà argument typunumber, a pokud ano, testuje, zda nenÃNaN/Infinity/-Infinity
Pro pÅevod hodnot jako 12pt nebo 100px na ÄÃslo:
- Pro âmÄkkouâ konverzi použÃvejte
parseInt/parseFloat, která naÄte ÄÃslo z ÅetÄzce a pak vrátà hodnotu, kterou dokázala pÅeÄÃst, než nastala chyba.
Pro desetinná ÄÃsla:
- Zaokrouhlujte pomocÃ
Math.floor,Math.ceil,Math.trunc,Math.roundneboÄÃslo.toFixed(pÅesnost). - PÅi práci s desetinnými ÄÃsly se ujistÄte, že nezapomÃnáte na ztrátu pÅesnosti.
Dalšà matematické funkce:
- Až je budete potÅebovat, podÃvejte se na objekt Math. Je to velmi malá knihovna, ale základnà potÅeby dokáže pokrýt.
KomentáÅe
<code>, pro nÄkolik Åádků je obalte znaÄkou<pre>, pro vÃce než 10 Åádků vložte odkaz na pÃskoviÅ¡tÄ (plnkr, jsbin, codepenâ¦)