Ruby Ruby 2.4.1 floor 保留小数的问题

zqalyc · 2018年01月26日 · 最后由 fangxing204 回复于 2018年01月29日 · 2188 次阅读

ruby 版本 2.4.1

> 526.56.floor(2)
 => 526.55 
> 

应该输出 526.56

试了下,确实如此

这是一道送分题。应该复习大一《计算机基础》关于浮点数的相关章节。

你猜 0.2 + 0.7 等于几。

老实说这种东西挺无聊的,有点像 Fixnum 和 Bignum,无聊的 implementation detail 一大堆,带来一些坑,可能还作为面试题目。然后 Ruby 2.4.0 就把 Fixnum 和 Bignum 合为 Integer 了。什么时候把 Float 和 BigDecimal 合二为一啊

总之,用 Float 做严格浮点数计算是不可靠的。如果要做精确使用浮点数计算,那就用 BigDecimal

这点 Java 做的好,没有Math.floor(Float f)方法,而有Math.floor(double d), 参考https://stackoverflow.com/questions/6060940/why-isnt-there-a-math-floorfloat

Peter 详谈 IEEE 浮点数编码机制 提及了此话题。 02月25日 05:15
需要 登录 后方可回复, 如果你还没有账号请 注册新账号