簡體   English   中英

Ruby / Rails如何計算和舍入價格?

[英]Ruby/Rails How to Calculate and Round Prices?

在開發發票時,我遇到了數學四舍五入的問題,我的單價和總額加起來並不完美。 出現此問題是由於業務需求,根據某些條件將隱藏的佣金傳遞給客戶。 我必須在幕后,將每個價格和總計乘以佣金百分比。

例如,未取整的計算價格乘以佣金。

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幫助程序,數字已關閉

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

您如何以編程方式解決此問題?

也許金錢金錢軌道的寶石會有用!

如果要手動執行操作,則應考慮將價格存儲為Integer數值! x的價格表示x $美分或x數十美分。 這樣,您可以消除數據庫中所有舍入問題。

同樣,使用number_to_currency幫助程序將幫助您正確顯示視圖中的內容。

如果要消除訂單項總計中的舍入誤差,則需要在計算總計之前將折價后的單價舍入到兩位小數,即

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM