如何在Ruby中获取double的所有数字?

时间:2013-12-29 13:02:34

标签: ruby floating-point double

我想用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

2 个答案:

答案 0 :(得分:2)

您获得的结果只是visual representation of a float number。但在内部,计算机使用的格式(二进制浮点)无法准确表示0.1,0.2或0.3之类的数字。

无论我们为您提供哪种代码,但如果数字具有无限表示,则每次以十进制表示格式化或显示它的尝试最终都将以路由结束。它可以是10位数,1000位数,甚至100000000位数,但它始终是一个粗体。

处理小数很难。根据您要实现的目标,您可能希望:

  • 考虑使用BigDecimal(BigDecimal为非常大或非常准确的浮点数提供类似的支持)或
  • 在Money操纵的情况下。您可以将值表示为整数并操纵整数。为了格式化目的,将整数除以分数

以下是使用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