NSNumber's stringValue выводит другие строки, которые нам не нужны - PullRequest
0 голосов
/ 16 января 2019

(lldb) po [@ (70.033) stringValue]
70,033
(lldb) po [@ (80.138) stringValue]
80,13800000000001
(lldb) po [@ (70.138) stringValue]
+70,13800000000001
(lldb) po [@ (100.01) stringValue]
100,01
(lldb) po [@ (90.03) stringValue]
90,03
(lldb) po [@ (90.01) stringValue]
90,01000000000001
(lldb) po [@ (900.01) stringValue]
900,01
(lldb) po [@ (100.01) stringValue]
100,01
(lldb) po [@ (80.01) stringValue]
80.01000000000001

Это ошибка в NSNumber? Или ошибка с моим Mac?

1 Ответ

0 голосов
/ 16 января 2019

Нет, это не ошибка. Это просто стандартная проблема с внутренним представлением чисел. Итак (по-быстрому):

var a = 0.15 + 0.15
var b = 0.1 + 0.2
print (a == b) // can be false!
print (a >= b) // can also be false!

var c = 80.138
print(c) // 80.138
print (c - 80.0 - 0.138) // 5.218048215738236e-15

Многие люди наблюдают за этим "странным" поведением практически на любом языке программирования. Просто проверьте некоторые веб-сайты, такие как stackoverflow.com:

странный вывод по сравнению с плавающей точкой с литералом float

или с красивыми изображениями:

https://bitbashing.io/comparing-floats.html

...