У меня есть номера округления при расчете налога.Номера рубинового круга и расчет налога на оплату
, например, на сумму 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), округление (пол).
Любые другие предложения по этой теме?
Скорее всего, это просто округление, но вам нужно будет дважды проверить с помощью PayPal. 20% от 2.12 составляет 0,424, что будет округлено до 0,42. – Drenmi
'Float (amount.to_f)' - возможно, умножить на 1.0, чтобы действительно убедиться, что это Float :) – steenslag
Пожалуйста, не используйте 'Float' для этого: вы пытаетесь сделать десятичный раунд в двоичном приближении к десятичное число. Это делает направление округления для граничных случаев существенно непредсказуемым, и похоже, что вам нужно предсказуемое решение. Вместо этого используйте десятичный тип с фиксированной точкой или с плавающей точкой или с целочисленной арифметикой. –