如何将 ruby BigDecimal 转换为 2 位小数位字符串? [英] How to convert a ruby BigDecimal to a 2-decimal place string?
本文介绍了如何将 ruby BigDecimal 转换为 2 位小数位字符串?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想将 Ruby BigDecimal 对象转换为漂亮的、可打印的货币值.所以我希望它打印到小数点后两位.我该怎么做?
I want to convert a Ruby BigDecimal object to a nice, printable currency value. So I want it to print it to 2 decimal places. How can I do it?
如您所见,以下方法均无效:
As you can see, none of the following approaches worked:
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?
Which expression will just produce the string 7.17?
推荐答案
无需四舍五入,也无需转换为 Float
,使用 BigDecimal#truncate
:
Without rounding, and without converting to a Float
, use BigDecimal#truncate
:
v = BigDecimal("7.1762")
v.truncate(2).to_s('F')
# => "7.17"
如果你需要显示尾随零,它会变得更复杂:
If you need to show trailing zeroes, it gets more complicated:
v = BigDecimal("4.1")
v.truncate.to_s + '.' + sprintf('%02d', (v.frac * 100).truncate)
# => "4.10"
它使用 truncate
转换为一个整数,总是精确的(并且没有四舍五入).
which uses truncate
to convert to an Integer, always exact (and without rounding).
这篇关于如何将 ruby BigDecimal 转换为 2 位小数位字符串?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文