Jaké jsou datové limity číselných datových typů v JS a Dartu

Zde vám objasním jaké jsou limity datových typů Number v JS a Double,Int v Dartu. Nebudu se zde zabývat “čistým” JS ale tím, který zkompilujete z Dartu. Pokud máte celé číslo v JavaScriptu, je to velice jednoduché, správné číslo hodnoty vám jednoduše řekne MDN, tedy pro kladné hodnoty to je 9007199254740991 a pro záporné -9007199254740992. Napsal jsem si v Dartu tento kód:

CODEimport 'dart:html' as Html;
void main()
{
  int highest = 9007199254740992;
  int highestMinusOne = highest - 1;
  int highestPlusOne = highest + 1;
  int highest2 = 9007199254740991;
  int highest2MinusOne = highest2 - 1;
  int highest2PlusOne = highest2 + 1;
  Html.window.console.log(highest.toString());
  Html.window.console.log(highestMinusOne.toString());
  Html.window.console.log(highestPlusOne.toString());
  Html.window.console.log(highest2.toString());
  Html.window.console.log(highest2MinusOne.toString());
  Html.window.console.log(highest2PlusOne.toString());
}

A spustil v Dartiu, výsledek byl takový:

MaxNumber in Javascript
Zde vidíte, že v Dartium a Dartu limit JavaScriptu nemá žádný význam. Žel se mi nepodařilo vygooglit kolik je vlastně limit int’u Dartu v Dartium. Pak jsem program zkompiloval do JavaScriptu a spustil v Opeře 26. Výsledek byl trochu jiný:
MaxNumber Plus in Javascript
Jak jistě vidíte, na 3 řádku je stejné číslo jako na prvním, to znamená že se číslo neinkrementovalo. Už jsem ale nezkoušel, zda by to tak fungovalo i čistém(nezkompilovaném) JS. To bysme měli datový typ int a teď se podíváme na Double.

Jednoduché pravidlo vše jistý, pro to aby jste měli jak v JS tak v Dartu stejné číslo je nutné dodržovat Pravidlo max. 15ti devítek(či jiných číslic), je jedno kde umístíte desetinnou čárku, stejně tak můžete před/za desetinnou čárku umístit jen nulu, pokud zbývající počet číslic bude max. 15, Dart ani JS vám číslo nezprzní. Takže tyto všechny čísla jsou OK:

  • 9.99999999999999
  • 99999999999999.9
  • 999999999999999.0 (zde vám JavaScript nevypíše koncové “.0” ale číslo je jinak úplně stejné)
  • 0.999999999999999
  • 99999999.9999999

Leave a Reply

Your email address will not be published. Required fields are marked *