我想用Ruby操纵一个很长的数字。但是当我在屏幕上打印数字时,我只得到原始数字的几位数。那么如何获得我想要的所有数字?
这是我的代码
x = Array.new
y = Float(0)
for i in (0..100)
x[i] = 14*2**i
y += x[i]/100**i
end
puts y
#=> 14.2857142857143
答案 0 :(得分:2)
您获得的结果只是visual representation of a float number。但在内部,计算机使用的格式(二进制浮点)无法准确表示0.1,0.2或0.3之类的数字。
无论我们为您提供哪种代码,但如果数字具有无限表示,则每次以十进制表示格式化或显示它的尝试最终都将以路由结束。它可以是10位数,1000位数,甚至100000000位数,但它始终是一个粗体。
处理小数很难。根据您要实现的目标,您可能希望:
以下是使用BigDecimal
require 'bigdecimal'
x = []
y = BigDecimal(0)
for i in (0..100)
x[i] = 14*2**i
y += x[i]/100**i
end
puts y
# => 0.14E2
puts y.to_i
# => 14
puts y.to_f
# => 14.0
答案 1 :(得分:0)
以下是我要求标准库mathn
:
require 'mathn'
x = Array.new
y = Float(0)
for i in (0..100)
x[i] = 14*2**i
y += x[i]/100**i
end
y # => 14.285714285714285
y.round(7) # => 14.2857143
y.round(9) # => 14.285714286
y.round(13) # => 14.2857142857143