簡體   English   中英

電子商務網站的貨幣轉換 - 由於四舍五入而防止錯誤的總購物車

[英]Currency Conversion for E-commerce site - Preventing incorrect Total Cart due to rounding

我正在為電子商務應用程序添加多種貨幣支持。 我解決問題的方法是將應用程序保留在它的基礎貨幣中,並讓模板在顯示價格時隨時調用priceDisplay()函數/插件。 因此模板繼續以美元金額收取價格。 priceDisplay函數在需要時正確轉換價格,並根據存儲在會話中的查看器設置添加正確的$或Euro符號。 在訂單提交時,應用程序將以美元金額以及currencyCode和currencyRate存儲訂單。 此外,我們將以其貨幣向客戶的信用卡收費,以確保他們按照訂單屏幕上顯示的內容收費。

現在我遇到的問題是在購物車中以及在結賬時顯示購物車總數。 例如,應用程序向模板發送要在購物車中顯示的價格:

小計:9.75
發貨:5.95
總計:15.70

模板獲取這些金額並在每個項目上調用priceDisplay函數。 如果貨幣匯率為1.1,那么我們會向用戶顯示:

小計:10.725 - > 10.73
發貨:6.545 - > 6.55
總數:17.27

您可以看到小計+發貨= 17.28,但轉換的總數是17.27。

所以我認為可以使用的幾個選項可以使用,但是並沒有想到:

  1. 處理應用程序端的所有轉換
  2. 在總計項目的情況下,模板應以基礎貨幣將所有單獨的加數和總計一起發送到priceDisplay函數,該函數將轉換它們並確保轉換的總數和加數總和相匹配。 在這種情況下,那么我如何與應用程序通信總數不是15.70但可能是15.71或15.69(因為我們將以基礎貨幣存儲訂單並在處理付款時乘以exchangeRate。)
  3. 跟蹤丟棄/添加的小數點作為轉換的一部分,並用它做一些“聰明”的事情。 所以在這個例子中,10.725,我們增加了千分之五。 因此,當我們轉換6.545時,我們應首先降低.005然后轉換。 也許這是上面選項2的過程嗎?
  4. 你的建議在這里。

如果它有任何區別,應用程序是PHP,模板是Smarty。

您還可以在添加購物車項目的行總計時看到相同的問題:
3項x 9.75每個= 29.25
轉化:
3件商品x 10.73(10.725)= 32.18(32.175)
但是3 x 10.73 = 32.19!= 32.18

我堅定地參加了一個陣營。 貨幣轉換是核心業務邏輯,屬於您的模型,而不是您的視圖。

此外,雖然錢看起來像浮點數,但事實並非如此。 無論你的基本單位是什么,錢都會以整數量換手。 例如,在美國,如果口香糖是10美分,我買10,那么我交易100便士10口香糖。 即使我從軟件角度給出一美元鈔票,最好將其計為100便士。

有關這方面的更多信息,請參閱Martin Fowler的“企業應用程序架構 模式”“分析模式” 他詳細討論了所有問題並提供了很好的示例代碼。 您還可以在網上找到一些信息:

  • 數量 (帶一些錢樣本代碼)
  • (主要是指向他的書的指針)

如果您需要會計工作,我也會與會計師交談。 通過改變費率,奇怪的費用和其他廢話,貨幣兌換往往很復雜,如果你從一開始就沒有把它弄好,你可以花很長時間追逐便士以使賬面保持平衡。

如果您根據轉換后的貨幣進行結算,則實際上您不應該在視圖邏輯中進行該計算。

個人而言,我只會將總金額,小計加到船舶金額上。 這顯然是最簡單的使用方法,沒有人會錯過額外的便士。

永遠不要使用浮點數來賺錢! 你無緣無故地讓自己進入一個受傷的世界。 由於PHP沒有小數定點類型,所以使用整數進行所有貨幣計算。 請參閱William的鏈接。

暫無
暫無

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

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