新手问题 Ruby 中 *0.1 和 /10 结果不一样?

thanatos · 2015年08月14日 · 最后由 msg7086 回复于 2015年08月14日 · 1625 次阅读

对于一个浮点型变量执行*0.1 和/10 为啥结果不同? 比如 133.3 * 0.1 = 13.33000000000002 而 133.3/10= 13.33

谢谢!

[68] pry(main)> 133.3/10.0
=> 13.330000000000002

#1 楼 @42thcoder why 啊?那个 2 是啥意思啊?

你如果追求精确的小数计算 应该用 BigDecimal

(BigDecimal.new("133.3")/BigDecimal.new("10.0")).to_f #=> 13.33

# BigDecimal provides similar support for very large or very accurate floating point numbers.

浮点数计算不精确这不是常识么

#4 楼 @ywjno 好吧,学到一个常识

因为 133.3 和 0.1 在二进制下无法精确表示,计算时就会产生细小的误差。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号