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ý:

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ý:

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