Zde vam objasnim jake jsou limity datovych typu Number v JS a Double,Int v Dartu. Nebudu se zde zabyvat “cistym” JS ale tim, ktery zkompilujete z Dartu. Pokud mate cele cislo v JavaScriptu, je to velice jednoduche, spravne cislo hodnoty vam jednoduse rekne MDN, tedy pro kladne hodnoty to je 9007199254740991 a pro zaporne -9007199254740992. Napsal jsem si v Dartu tento kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import '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, vysledek byl takovy:
Zde vidite, ze v Dartium a Dartu limit JavaScriptu nema zadny vyznam. Zel se mi nepodarilo vygooglit kolik je vlastne limit int’u Dartu v Dartium. Pak jsem program zkompiloval do JavaScriptu a spustil v Opere 26. Vysledek byl trochu jiny:
Jak jiste vidite, na 3 radku je stejne cislo jako na prvnim, to znamena ze se cislo neinkrementovalo. Uz jsem ale nezkousel, zda by to tak fungovalo i cistem(nezkompilovanem) JS. To bysme meli datovy typ int a ted se podivame na Double.
Jednoduche pravidlo vse jisty, pro to aby jste meli jak v JS tak v Dartu stejne cislo je nutne dodrzovat Pravidlo max. 15ti devitek(ci jinych cislic), je jedno kde umistite desetinnou carku, stejne tak muzete pred/za desetinnou carku umistit jen nulu, pokud zbyvajici pocet cislic bude max. 15, Dart ani JS vam cislo nezprzni. Takze tyto vsechny cisla jsou OK:
- 9.99999999999999
- 99999999999999.9
- 999999999999999.0 (zde vam JavaScript nevypise koncove “.0” ale cislo je jinak uplne stejne)
- 0.999999999999999
- 99999999.9999999