我正在为电子商务应用程序添加多币种支持。我解决这个问题的方法是将应用程序保持在它的基础货币中,并让模板在显示价格时随时调用 priceDisplay() 函数/插件。因此,模板继续接收以美元为单位的价格。 priceDisplay 函数可根据需要正确转换价格,并根据存储在 session 中的观众设置添加正确的 $ 或欧元符号。在提交订单时,应用程序将以美元金额以及货币代码和货币汇率存储订单。此外,我们将以客户的货币向他们的信用卡收费,以确保他们收到的账单与订单屏幕上显示的完全一致。
现在我遇到的问题是在购物车中以及结账时显示购物车总数。例如,应用程序向模板发送要在购物车中显示的价格:
小计:9.75
船:5.95
总计:15.70
模板获取这些金额并对每个项目调用 priceDisplay 函数。如果货币汇率是 1.1,那么我们会向用户显示:
小计:10.725 -> 10.73
船:6.545 -> 6.55
总计:17.27
可以看到小计+ship = 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
最佳答案
我坚定地站在第一阵营。货币换算是核心业务逻辑,属于您的模型,而不属于您的 View 。
此外,虽然钱看起来像 float ,但它不是。无论您的基本单位是什么,金钱都会以整数形式易手。例如,在美国,如果口香糖每个 10 美分,我买了 10 个,那么我用 100 美分换了 10 个口香糖。即使我给出一美元钞票,从软件的角度来看,最好将其计为 100 便士。
有关这方面的更多信息,请参阅 Martin Fowler 的 "Patterns of Enterprise Application Architecture"和 "Analysis Patterns" .他详细讨论了所有问题并提供了很好的示例代码。您还可以在网上找到其中的一些信息:
如果您需要会计工作,我也会与会计交谈。汇率变化、奇怪的费用和其他无稽之谈通常会使货币兑换变得复杂,如果您不能从一开始就做好准备,您可能会花很长时间去追逐金钱以实现收支平衡。
关于php - 电子商务网站的货币转换 - 防止因四舍五入而导致购物车总数不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1144653/
我有一个ActiveRecord对象,我想在不对模型进行永久验证的情况下阻止它被保存。您过去可以使用errors.add执行类似的操作,但它看起来不再有效了。user=User.lastuser.errors.add:name,"namedoesn'trhymewithorange"user.valid?#=>trueuser.save#=>true或user=User.lastuser.errors.add:base,"myuniqueerror"user.valid?#=>trueuser.save#=>true如何在不修改用户对象模型的情况下防止将用户对象保存在Rails3.2中
我想验证一个电子邮件地址是否是PayPal用户。是否有API调用来执行此操作?是否有执行此操作的ruby库?谢谢 最佳答案 GetVerifiedStatus来自PayPal'sAdaptiveAccounts平台会为您做这件事。PayPal没有任何codesamples或SDKs用于Ruby中的自适应帐户,但我确实找到了编写codeforGetVerifiedStatusinRuby的人.您需要更改该代码以检查他们拥有的帐户类型的唯一更改是更改if@xml['accountStatus']!=nilaccount_status
我想知道我应该如何着手这个项目。我需要每周向人们发送一次电子邮件。但是,这必须在每周的特定时间自动生成并发送。编码有多难?我需要知道是否有任何书籍可以提供帮助,或者你们中的任何人是否可以指导我。它必须使用rubyonrails进行编程。因此有一个网络服务和数据库集成。干杯 最佳答案 为什么这么复杂?您只需安排工作。您可以使用Delayed::Job例如。Delayed::Job让您可以使用run_at符号在特定时间安排作业,如下所示:Delayed::Job.enqueue(SendEmailJob.new(...),:run_
Ruby中防止SQL注入(inject)的好方法是什么? 最佳答案 直接使用ruby?使用准备好的语句:require'mysql'db=Mysql.new('localhost','user','password','database')statement=db.prepare"SELECT*FROMtableWHEREfield=?"statement.execute'value'statement.fetchstatement.close 关于ruby-防止SQL注入(inject
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
我需要当前周数,如果我没有完全弄错的话现在是第51周?然而,当在控制台中测试它时,我得到了这个。Time.now=>2013-12-1911:08:25+0100Time.now.strftime('%U')=>"50"Date.today=>Thu,19Dec2013Date.today.strftime("%U").to_i=>50这是为什么? 最佳答案 Time.now.strftime('%V')将根据ISO8601为您提供周数。 关于ruby-on-rails-RubyOnRa
我正在尝试使用IMAP和rubymailgem获取gmail的正文。当我按照anotherstackoverflowanswer.中的描述获取RFC822字段时,它工作得很好.Fiedl很好地描述了这种方法answer类似的问题。这种方法很棒,只是它需要获取RFC822,而RFC822也会获取所有附件。是否有任何其他领域或其他方法我可以采取不获取附件但仍然使用rubymailgem来获得解码良好的正文? 最佳答案 您必须解析并理解返回的BODYSTRUCTURE响应的实际结构,请参阅RFC3501,p.56.还要记住应用相关
Ruby中是否有一种方法可以使用S/MIME对电子邮件消息进行数字签名?我们的团队使用PKI,我们的用户习惯于期待重要消息的数字签名。我知道我可以调用openssl命令行工具:opensslsmime-sign-signer$CERT_FILE-passinpass:$CERT_PASS-in$UNSIGNED_MAIL-out$SIGNED_MAIL-certfile$CERT_CA_FILE-from'your'-to'recipients'-subject'TheSubject'但我希望利用Ruby解决方案。 最佳答案 我最终
我在生产环境(CentOS5.6)中遇到此错误,但在开发环境(Ubuntu11.04)中运行良好。在这两种环境中,该应用程序都使用Ruby1.9.3和Rails3.0.9,并由passenger和nginx提供服务。我的Mechanizegem版本是2.3。未找到代码转换器(UTF-8)此代码的最后一行触发它:mech=Mechanize.newpage=mech.get("http://myurl.com/login.php?login_name=a&password=b")form=page.form_with(:name=>"loginForm")form.field_with(
我似乎无法解决的一个非常基本的问题是如何向我的RubyonRailsSpree商务应用程序添加一个新View。我想要做的是在_main_nav_bar.html.erb中的主页链接旁边有一个链接,当您单击它时,它会在显示产品的地方显示一个关于页面。所以:homeaboutcart---------------------thingsoftheHOMEpage---------------------footer点击关于导致:homeaboutcart---------------------thingsoftheABOUTpage---------------------footer在