2013-12-09 101 views
0

我有以下代码:迭代通过浮点数红宝石

float_number = 0.01 
while first_number < 0.10 do 
float_number += 0.01 
puts first_number 
end 

这导致:

 
0.02 
0.03 
0.04 
0.05 
0.060000000000000005 
0.07 
0.08 
0.09 
0.09999999999999999 
0.10999999999999999 

这是八九不离十正确的。有没有一种有效的方法来确保我没有得到一堆额外的数字?

+0

作为输出显示,有更多的东西怎么回事。浮点数并不总是100%精确到十进制数。这不是很容易解决,所以你在寻找什么 - 不错的输出,完美的精确1/100秒,还是别的什么? –

+1

使用['Float#round'](http://www.ruby-doc.org/core-1.9.3/Float.html#method--round) - 例如'(0.060000000000000005).round(2)#=> 0.06'(精确到百分之一) – iamnotmaynard

+0

如果你问为什么它首先给你'0.060000000000000005'而不是'0.06',另请参见本网站上的所有问题关于浮点值和[每个计算机科学家应该知道的关于浮点运算的知识](http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html) – iamnotmaynard

回答

2
+0

@iamnotmaynard其实,新版本的标准库http://ruby-doc.org/stdlib-2.0.0/libdoc/bigdecimal/rdoc/ – Arantir

+0

啊。我懂了。那么非常好。您应该将该链接添加到您的答案中。 – iamnotmaynard

+0

@iamnotmaynard其实,并非如此新鲜http://ruby-doc.org/stdlib-1.8.7/libdoc/bigdecimal/rdoc/BigDecimal.html – Arantir