Dart, float for loop will cause a strange result

for(int i=0; i<10; i++) {
    priceValue.add(54.99 + i*5);
    print(54.99 + i*5);
}

Result:

js_primitives.dart:30 54.99
js_primitives.dart:30 59.99
js_primitives.dart:30 64.99000000000001
js_primitives.dart:30 69.99000000000001
js_primitives.dart:30 74.99000000000001
js_primitives.dart:30 79.99000000000001
js_primitives.dart:30 84.99000000000001
js_primitives.dart:30 89.99000000000001
js_primitives.dart:30 94.99000000000001
js_primitives.dart:30 99.99000000000001

What causes the appearance 00000000001?

+4
source share
1 answer

This is exactly how double numbers work. You will get the same result in other languages ​​that use the same doubles as Dart (they are standardized as 64-bit floating-point numbers IEEE-754 ).

, , , 89,99 ​​ . 53 . 89.99 , 1/3 (0,33333333.... ).

, , . , "" double, .

54.99 . 54.99 , 54.99 (aka 5499/100):

54,99000000000000198951966012828052043914794921875

35 , , :

89,990000000000009094947017729282379150390625

- 54.99, , , 89.99, :

89,9899999999999948840923025272786617279052734375

double , . , .

, 54.99 + 35 , 89.99, . 89.99, , , 54.99 + 35 , . , 00000000000001.

, , , . , .

+9

Source: https://habr.com/ru/post/1679308/


All Articles