3

我试图在没有美分的情况下四舍五入我的钱,但我希望始终将金额四舍五入(ceil)。

我已经搞定了:

MoneyRails.configure do |config|
  config.rounding_mode = BigDecimal::ROUND_CEILING
end

Money.new(12345).format(:no_cents)

但它仍然返回“$123”而不是“$124”。

4

2 回答 2

2

我正在查看 Money gem,格式似乎没有利用任何舍入规则。它只是砍掉美分以获得“绝对”价值。

formatted = self.abs.to_s
...
if rules[:no_cents] || (rules[:no_cents_if_whole] && cents % currency.subunit_to_unit == 0)
  formatted = "#{formatted.to_i}"
end

来源:https ://github.com/RubyMoney/money/blob/master/lib/money/money/formatting.rb

试图为您找到解决方法,也许将其作为一种方法添加到您的 Rails 模型中:

[2] pry(main)> require 'money'
=> true
[3] pry(main)> money = Money.new(12345, 'USD')
=> #<Money fractional:12345 currency:USD>
[6] pry(main)> "#{money.currency.symbol}#{money.to_f.ceil}"
=> "$124"
于 2017-09-26T15:00:27.603 回答
0

您是否尝试将舍入模式设置为ROUND_UP, 而不是ROUND_CEILING

于 2017-09-26T14:49:42.280 回答