我想将 Ruby BigDecimal 对象转换为漂亮的、可打印的货币值。所以我希望它打印到小数点后两位。我该怎么做?

如您所见,以下方法均无效:

irb(main):033:0> v = BigDecimal("7.1762")
=> #<BigDecimal:7fe97c1c9310,'0.71762E1',18(18)>
irb(main):034:0> v.to_s('2F')
=> "7.17 62"
irb(main):035:0> v.to_s('F')
=> "7.1762"
irb(main):036:0> v.to_s('%0.2F')
=> "0.71762E1"
irb(main):037:0> v.to_s('%0.2f')
=> "0.71762E1"
irb(main):038:0>

哪个表达式只会产生字符串 7.17?

最佳答案

没有舍入,也没有转换为 Float ,使用 BigDecimal#truncate :

v = BigDecimal("7.1762")
v.truncate(2).to_s('F')
# => "7.17"

如果您需要显示尾随零,它会变得更加复杂:
v = BigDecimal("4.1")
v.truncate.to_s + '.' + sprintf('%02d', (v.frac * 100).truncate)
# => "4.10"

它使用 truncate 转换为整数,总是精确的(并且没有四舍五入)。

关于ruby - 如何将 ruby​​ BigDecimal 转换为 2 位小数位字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24892378/

10-13 04:45