0.01+0.01 => 0.02 200.01+0.01 => 200.01999999999998
Ruby 版本:1.9.3p0
是你不懂浮点数吧
浮点数是不精确的,请使用 BigDecimal
@quakewang 谢谢
浮点类型本来就不准
查了点资料。浮点数其实是真实数的近似,所以产生了限制。以下几点要注意:
1,浮点数是有限的。 浮点数只能拥有有限信息。
2,浮点数有误差。 任意的实数,只要是用有效数字和指数的结合来近似表示的,有效数字的不足部分被简单地忽略。多次运算后,与实际值的误差就会累计起来,计算结果与理论值偏差很大是常有的事。
3,对于浮点小数,结合法不成立。 结合法是指加法和乘法中,不管顺序怎样,计算结果都相同的法则。但在浮点小数中不成立。
浮点数运算的陷阱可以归结为 2 个原因:一是能够表示的精度有限,而是以二进制表示。这些换来的代价是速度上的优势,Ruby 中,为了提高精度,提供了 BigDecimal 类,有 3 个特征: 1,与 Bignum 一样,有效数字自动扩展; 2,以十进制计算; 3,以 C 语言记述,比内嵌的浮点数类 Float 要慢。
#5 楼 @helloqidi
还有一条:别想楼主那样,把一个很大的数字和很小的数字一起相加,那样会很惨。(来自于 松本行宏的程序世界 )
@zw963 谢谢提醒