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
我在计算税金时遇到了四舍五入问题。
例如,金额 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