我正在为电子商务应用程序添加多种货币支持.我解决问题的方法是将应用程序保留在它的基础货币中,并让模板在显示价格时随时调用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.
所以我认为可以使用的几个选项可以使用,但是并没有想到:
如果它有任何区别,应用程序是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的"企业应用程序架构模式"和"分析模式".他详细讨论了所有问题并提供了很好的示例代码.您还可以在网上找到一些信息:
如果您需要会计工作,我也会与会计师交谈.通过改变费率,奇怪的费用和其他废话,货币兑换往往很复杂,如果你从一开始就没有把它弄好,你可以花很长时间追逐便士以使账面保持平衡.
| 归档时间: |
|
| 查看次数: |
1680 次 |
| 最近记录: |