Я новичок в быстрой (с использованием быстрого 2.2), и я вижу проблему, где 200.23 - 200
показано равным 0.2299999999999898
. Я знаю, что компьютеры не могут точно представлять иррациональные числа, но я не понимаю, почему рациональное число также не представляется правильно. Это влияет на выходные номера, созданные моей программой, что приводит к проблемам.Видя ошибки округления (например, 0.22999999 вместо 0.23) в Swift 2.2
Вот пример кода площадка (очень простая версия часть моего фактического кода) показывает такое поведение:
var number:Double = 200.23 //Number I'm testing
var left: Double = floor(number) // Extracting integer part
var right: Double = number-left // Extracting fraction part
В приведенном выше коде я определяю номер, а затем извлекая его целиком и дробной части , Дробная часть должна быть 0.23
, однако она показана как 0.2299999999999898
на игровой площадке Swift.
Аналогично, если изменить исходное число от 200.23
до 100.23
, то дробная часть показано, что 0.230000000000004
Как я могу решить эту проблему?
EDIT:
Я спросил о контексте этой проблемы. Я разрабатываю приложение статистики, которое часто использует числа и на самом деле имеет небольшой встроенный калькулятор. Поэтому, если я попытаюсь вычислить 200.23 - 0.23 и увидит что-нибудь, кроме 0,23, он будет удивлен!
Как я уже говорил выше, я уже знаю проблему с плавающей точкой. Но как я могу обойти это? Конечно, все программное обеспечение, написанное сегодня, каким-то образом справляется с этой проблемой. – Ahmad
«Я знаю, что компьютеры не могут точно представлять иррациональные числа, но я не понимаю, почему рациональное число также не представляется правильно». Это неверно: компьютеры не могут точно представлять * все * рациональные числа. И десятичные обозначения (люди) также не могут обозначать иррациональные числа. – Evert
Просто используйте целые числа, 1.23 означает 123, 836.92 означает 83692 – Kametrixom