如何在BigDecimal构造函数中使用String指定精度参数?

时间:2013-05-19 16:46:24

标签: ruby bigdecimal

BigDecimal构造函数使用可选的第二个参数,它指定对象的精确数字。来自ruby-doc

  

新(初始,数字)

     

有效位数,作为Fixnum。如果   省略或0,有效位数由   初始值。

但是,使用String时,此行为与描述不符。

BigDecimal.new('1.2345', 4).to_s('F')
# 1.2345
BigDecimal.new('1.2345', 1).to_s('F')
# 1.2345

使用String参数时如何使用BigDecimal指定精度?

2 个答案:

答案 0 :(得分:3)

BigDecimal不接受带字符串值的精度参数。

正确方法:

BigDecimal.new("1020.567").round(2) => 1020.57

错误的方法:

BigDecimal.new(1020.567, 2) => 1000.0

答案 1 :(得分:0)

一个简单的解决方法是BigDecimal.new('1.2345'.to_f, 1)