30.0 * 0.009 # => 0.26999999999999996
Кто-нибудь знает, почему это не 0.27
?Неожиданное поведение рубинового поплавка при умножении
Любые рекомендации по поводу того, что с этим делать?
30.0 * 0.009 # => 0.26999999999999996
Кто-нибудь знает, почему это не 0.27
?Неожиданное поведение рубинового поплавка при умножении
Любые рекомендации по поводу того, что с этим делать?
Поскольку вы уже нашли материалы на почему тема, я просто ответить на что делать часть вопроса. Если вы абсолютно не хотите приближаться, вы должны использовать рациональные числа:
30 * 0.009r # => (27/100)
Вот как работают числа с плавающей точкой. «Мы плаваем с боргом, точность не имеет значения, вы будете приближены», –
, пожалуйста, прочтите это http://www.rails-troubles.com/2011/12/ruby-float-quirks.html?m=1 – bmalets
Я читаю Это. Автор предлагает использовать BigDecimal между прочим. Я сейчас читаю. Что вы делаете в своей базе кода, если раньше вы исправляли эту проблему? Я смотрю «Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой». Там также хорошая статья, сравнивающая разные языки http://itreallymatters.net/post/386327451/floating-point-arithmetics-in-19-programming#.Vl4WN3arRpg. –