0.1 + 0.2 = ?
Dart'da ishga tushirib ko'ring. Javob 0.30000000000000004 chiqadi.
Oddiy ilovada bu kulgili fakt. Fintech'da esa foydalanuvchi hisobidan "yo'qolgan" tiyin, keyin support'ga keladigan g'azabli xabar.
Sababi oddiy: double ikkilik sanoq tizimida saqlanadi va 0.1 ni aniq ifodalay olmaydi. Bitta amalda xato sezilmaydi, lekin minglab tranzaksiyada yig'ilib boradi. round() bilan yashirish ham yechim emas, muammoni faqat keyinroqqa suradi.
Pul bilan ishlaganda o'zimga qo'ygan qoidalar:
1)Summani eng kichik birlikda int qilib saqlash. 12 500,50 so'm emas, 1 250 050 tiyin.
2)Foiz, komissiya kabi kasrli hisob kerak bo'lsa, decimal paketi.
3)Backend bilan summani int yoki Stringda almashish. JSON'da kasrli son keldimi, Dart uni baribir double qilib parse qiladi.
4)Formatlash faqat UI'da, eng oxirgi qadamda.
5)Valyutani summa bilan birga saqlash. "100" degani 100 nima?
P/s: Kalkulyator ilovasi noto'g'ri hisoblasa kechirishadi. Pul o'tkazadigan ilova noto'g'ri hisoblasa, kechirishmaydi))
@devspaceuz