2016-11-15 76 views
1

對於不同的語言,標題本身有many answers但我有一個奇怪的行爲。我在軌道控制檯中得到了正確的數字,但在Rails中並不如此。防止四捨五入的回答

控制檯:

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

Rails的答案是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 
+0

你能後的控制器的代碼? – Pavan

+0

@Pavan Ive更新了帖子 – Sylar

+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