Ruby的Float类的计算结果可以无限接近0.1但是这还是无法满足我们的要求,比如看看下面这个例子:
0.4 - 0.3 == 0.1 # 两边是不等的
是不是很奇怪,原因是因为0.4-0.3的结果取近似值后与0.1不同。这个问题不是只存在于Ruby中所有基于IEEE-754 浮点运算规范的语言比如C,Java,JavaScript都存在这样的问题。
一个解决的办法是使用10进制计算代替二进制计算,Ruby标准库中提供了BigDecimal 类可以很好的解决我们的问题,尽管BigDecimal 的性能比Float类要差,但是应付我们平常的计算已经足够了(只要你不是编写科学计算程序)。
No comments:
Post a Comment