开发发票,我正在进行数学四舍五入的问题,我的单位价格和总数并没有完美地加起来。出现这个问题的原因是业务要求隐藏的佣金根据特定条件传递给客户。我必须走到幕后,将每个价格和总额乘以佣金百分比。
例如,未计算的计算价格乘以佣金。
Item Name qty Price2 qty2 Price Total
Kitchen Counter Uba Tuba 100.0 72.4275 100.0 18.125 9055.249999999999 9055.249999999999
Vanity Uba Tuba 100.0 72.4275 100.0 18.125 9055.249999999999 9055.249999999999
Grand Total 18110.5
现在使用rails number_to_currency helper,数字已关闭
Kitchen Counter Uba Tuba 100.0 $72.43 100.0 $18.13 1 $9,055.25 $9,055.25
Vanity Uba Tuba 100.0 $72.43 100.0 $18.13 1 $9,055.25 $9,055.25
由于价格的四舍五入,如果客户自己进行数学运算,总数就会关闭。
rounded total = $9056.00
你如何以编程方式解决这个问题?
答案 0 :(得分:2)
可能会使用the money和money-rails宝石!
如果您想手动执行操作,则应考虑将价格存储为Integer
值!如果x的价格意味着x美分或x数十美分。通过这样做,您可以摆脱数据库中的所有舍入问题。
使用number_to_currency帮助程序也可以帮助您正确显示视图内容。
答案 1 :(得分:1)
如果要消除行项目总计中的舍入误差,则需要在计算总计之前将折扣单位价格四舍五入为小数,即
qty = 100.0
price = 18.125
qty2 = 100.00
price2 = 72.4275
total = qty * price.round(2) + qty2 * price2.round(2)
total.round(2) # happens in number_to_currency
#=> 9056.0
而不是你现在正在做的事情
total = qty * price + qty2 * price2
total.round(2) # happens in number_to_currency
#=> 9055.25