我在我的应用中使用了BigDecimal
值,因为要对购物车中的商品进行计算,我读到BigDecimal
是首选,与整数或浮点数相比?< / p>
我想谈一个场景。当我有这个例子时
amount = BigDecimal.new("28.99")
amount #=> #<BigDecimal:51d3120,'0.2899E2',18(18)>
amount.to_s #=> "28.99"
amount.to_f #=> 28.99
到目前为止,这是预期的行为,但是当我执行以下操作时
amount = BigDecimal.new("28.00") || amount = BigDecimal.new("28")
amount.to_s #=> "28.0"
amount.to_f #=> 28.0
这是预期的行为吗?在我的数据库中,我设置了比例和精度
t.decimal :price, precision: 30, scale: 2
当我在数据库中保存28.00
的值时,我希望在我的视图中显示28.00
而不是28.0
更新
刚刚在SO How to convert a ruby BigDecimal to a 2-decimal place string?上发布了这个解决方案
的帖子v = BigDecimal("28.00")
v.truncate.to_s + '.' + sprintf('%02d', (v.frac * 100).truncate)
我想这是处理它的唯一方法吗?
答案 0 :(得分:3)
sprintf("%2.f", v)
应该有效。 sprintf
的选项可在
http://ruby-doc.org/core-2.3.0/Kernel.html#method-i-sprintf
此外,如果您使用Rails,number_with_precision
帮助程序可能更容易使用 - 您可以在http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_with_precision找到文档