我正在向电子商务应用程序添加多币种支持。我解决问题的方法是将应用程序保持在其基础货币中,并让模板在显示价格时调用 priceDisplay() 函数/插件。因此,模板继续接收美元金额的价格。priceDisplay 函数在需要时正确转换价格,并根据查看器设置添加正确的美元或欧元符号,存储在会话中。在提交订单时,应用程序将以美元金额以及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。
所以我认为有几个选项可以工作,虽然没有完全考虑到:
- 在应用程序端处理所有转换
- 在对项目进行合计的地方,模板应将基础货币中的所有单个加数和总计一起发送到 priceDisplay 函数,该函数将转换它们并确保转换后的总计和加数之和匹配。在这种情况下,我如何向应用程序传达总数不是 15.70 而可能是 15.71 或 15.69(因为我们将以基础货币存储订单并在处理付款时乘以 exchangeRate。)
- 作为转换的一部分,跟踪删除/添加的小数点,并用它做一些“聪明”的事情。所以在这个例子中,10.725,我们加了千分之五。所以当我们转换 6.545 时,我们应该先去掉 .005 然后再转换。也许这就是上面选项 2 所做的过程?
- 你的建议在这里。
如果有任何区别,应用程序是 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