防止四舍五入的回答

时间:2016-11-15 06:15:01

标签: ruby math

对于不同的语言,标题本身只有many answers,但我有一种奇怪的行为。我在rails控制台中得到了正确的数字,但Rails却没有。

控制台:

a = -42.57
b = -43.47
a - b = 0.8999999999999986

滑轨'答案是1.0。这个轻微的错误对我的应用程序产生了巨大的影响。

answer = (a-b)
answer < 1 ? 'do something' : 'do other thing'

我需要精确的计算。为什么在Rails控制器中不是这样但在控制台中是正确的?没有涉及数据库,只是方法中的基本数学。

控制器

def step_3  
 a = 112.53 - 155
 b = 112.53 - 156
 a - b
end

1 个答案:

答案 0 :(得分:3)

这不是Rails问题。您使用的是不合适的数据类型。

如果您需要精确的结果,可以这样做:

require 'bigdecimal'

a=BigDecimal.new('-42.57')
b=BigDecimal.new('43.47')
c=a-b
puts(c.to_s('F')) # prints -86.04