如何将ruby BigDecimal转换为2位小数字符串?

Saq*_*Ali 12 ruby

我想将Ruby BigDecimal对象转换为漂亮的可打印货币值.所以我想把它打印到2位小数.我该怎么做?

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

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>
Run Code Online (Sandbox Code Playgroud)

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

Nei*_*ter 16

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

v = BigDecimal("7.1762")
v.truncate(2).to_s('F')
# => "7.17"
Run Code Online (Sandbox Code Playgroud)

如果你需要显示尾随零,它会变得更复杂:

v = BigDecimal("4.1")
v.truncate.to_s + '.' + sprintf('%02d', (v.frac * 100).truncate)
# => "4.10"
Run Code Online (Sandbox Code Playgroud)

它使用truncate转换为一个整数,总是准确(并没有四舍五入).

  • (number.truncate(2).to_s('F')+'00')[/.*\.. {2} /]也有效 (2认同)