JavaScript/Skaičiaus tipo duomenys

Iš Wikibooks.

JAVASCRIPT PROGRAMAVIMO PAGRINDAI
(instrukcinis vadovas pradedantiesiems)[keisti]

Skaičiaus tipo duomenys[keisti]


Skaičiaus tipo duomenys JS yra tokie duomenys, kurių tipas yra „skaičius“. Jų atveju operatorius typeof grąžins tipo pavadinimą number (kas iš anglų k. reiškia „skaičius“)

JS užkoduoja skaičius naudojant 64 bitų slankiojo kablelio formatą pagal IEEE 754 standartą. JS supranta skaičius, parašytus su eksponente, neigiamus ir trupmeninius skaičius. Supranta skaičius, parašytus dvejetainės, aštuntainės ir šešioliktainės skaičiavimo sistemų ženklais.

Užduotis. Susipažinkite su įvairiais JS suprantamais skaičiais ir patikrinkite jų tipą konsolėje:

  • typeof(10); // sveikieji skaičiai
  • typeof(2.344); // trupmeniniai skaičiai
  • typeof(-10); // neigiami skaičiai
  • typeof(1.03e25); // skaičiai su eksponente
  • typeof(0b100100); // dvejetainės sistemos skaičiai
  • typeof(0o123); // aštuntainės sistemos skaičiai
  • typeof(0xac); // šešioliktainės sistemos skaičiai

Aiškumo dėlei JS leidžia užrašyti didelius skaičius su žemojo brūkšnelio skiriamuoju simboliu, įskaitant ir trupmeninę dalį, ir operacijose perskaito juos, tarsi brūkšnelio nebūtų:

  • typeof(100_000.000_001); // skaičius 100000,000001
  • 100_000.000_001 + 0.000_001; // rezultatas 100000.00000199999

Atkreipkite dėmėsį, kad aukščiau esančią operaciją JS atliko ne visai tiksliai. Su tuo susidursite visose programavimo kalbose. JS vidinėse operacijose dešimtainiai skaičiai pakeičiami į dvejetainės sistemos ir, atlikus operacijas, įvykdomas rezultato skaičiaus pakeitimas atgal į dešimtainį.

JS ne visuomet pavyksta teisingai atlikti operacijas su trupmeniniais skaičiais. Tai svarbu palyginimo operacijose. Tad, palyginus, iš pažiūros, tokius pačius skaičius, JS gali grąžinti false vertę

  • 0.65-0.35; // rezultatas 0.30000000000000004
  • 0.3 === (0.65-0.35); // rezultatas false

Norint to išvengti operacijose trupmeniniai skaičiai padauginami iš skaičių 10, 100 ir t. t., kol netenka trupmeninės dalies, o po to rezultatas atitinkamai padalijamas. Kitu atveju galima atlikti skačiaus keitimą į tekstą suapvalinant ir po to pakeičiant tekstą atgal į skaičių.

Atkreipkite dėmesį, kad trupmeniniai skaičiai JS kode užrašomi su taško skiriamuoju ženklu, o ne lietuviškoje sintaksėje įprastu kablelio. Tad, jei įvesite skaičių su kableliu, JS kablelį supras esant skiriamuoju simboliu tarp dviejų skaičių: prieš kablelį ir po kablelio.

JS skaičių aibė nėra begalinė. Skaičiams, kurie yra per dideli arba per maži pavaizduoti, JS naudoja Infinity ir -Infinity (išvertus iš anglų k. infinity reiškia „begalybė“) vertes atitinkamai.

Užduotis. Patikrinkite konsolėje šių ekspresijų vertes:

  • 1e+500;
  • -1/0;
  • typeof(Infinity);
  • typeof(-Infinity);
  • Infinity === -Infinity;

Kai skaičius yra tiek arti nulio vertės, kad nebepakanka dvejetainio kodo jam užkoduoti, JS naudoja dvi nulių vertes, +0 ir -0. Jos parodo, iš kurios pusės skaičius buvo arti nulio. Pliuso ženklas prieš +0 nevaizduojamas.

Užduotis. Patikrinkite konsolėje šių ekspresijų vertes:

  • 1e-500;
  • -1e-500;
  • typeof(+0);
  • typeof(-0);
  • +0 === -0;

Vykdant matematines operacijas su ne skaičiaus tipo operandais JS bandys pakeisti jų tipą į skaičiaus (number). To nepavykus JS vistiek vykdys operaciją ir grąžins skaičiaus vertę NaN, kuri rodo, kad duomens tipas yra skaičius (number), bet vertės JS neatpažino esant skaičiumi. NaN vertę galima gauti su aritmetiniais operatoriais, išskyrus sudėties:

  • 1*"ač2"; // rezultatas NaN
  • 0/0; // rezultatas NaN
  • typeof(NaN); // rezultatas number
  • NaN === NaN; // rezultatas false

NaN yra anglų k. frazės Not a Number trumpinys, išvertus reiškia „ne skaičius“.