Ruby 整数和 paypal 税计算

Ruby round numbers and paypal tax calculation

我在计算税金时遇到了四舍五入问题。

例如,金额 2.12 和税收 20%,我计算如下:

# this is on Numeric class
def ceil_money
    (self * 100).ceil / 100.0
end

...
amount = "2.12"
((Float(amount.to_f) * Float("20.0"))/100).ceil_money

结果是 0.43

要paypal我必须同时发送税率和税额,他好像忽略了我的税额并根据税率计算税值。但我遇到的问题是,在我收到的付款确认消息中 tax_amount 因为 0.42 似乎他们将其四舍五入。

我想知道计算税金、四舍五入 (ceil)、四舍五入 (floor) 的正确程序是什么。

关于这个主题还有其他建议吗?

我会使用 Ruby 的内置 BigDecimal 来获得更准确的舍入:

require 'big_decimal'

amount = BigDecimal.new('2.12')
tax_rate = 0.2

(amount * tax_rate).round(2).to_f #=> 0.42

但是,在这种情况下,我认为是您自己的舍入方法导致了问题,因为:

amount = 2.12
tax_rate = 0.2

(amount * tax_rate).round(2) #=> 0.42