如何将 ruby​​ BigDecimal 转换为 2 位小数位字符串? [英] How to convert a ruby BigDecimal to a 2-decimal place string?

查看:87
本文介绍了如何将 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆