显示BigDecimal到任意精度

时间:2013-07-10 11:48:12

标签: ruby

不知何故,我无法使用谷歌或SO ...

找到答案

考虑:

require 'bigdecimal'

puts (BigDecimal.new(1)/BigDecimal.new(3)).to_s

#=> 0.333333333333333333E0

我希望能够指定100或200或1000的精度,这将打印出“0”。其次是100三,二三或三十三。

我怎样才能做到这一点?答案也适用于非重复小数,在这种情况下,精度的额外数字将用零填充。

谢谢!

1 个答案:

答案 0 :(得分:5)

我认为问题是BigDecimal对象的精度设置不够高。如果我使用div代替/明确指定操作所需的精度,我可以打印1000个小数位数:

require 'bigdecimal'

puts (BigDecimal.new(1).div(BigDecimal.new(3), 1000)).to_s

#=> 0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333E0

之后,您可以使用round限制小数位数。