Ruby on rails 数据库、货币建模、本地化策略

Ruby on rails 数据库、货币建模、本地化策略,ruby-on-rails,database,e-commerce,currency,spree,Ruby On Rails,Database,E Commerce,Currency,Spree,在本地化货币环境中存储电子商务产品信息(即产品价格、当前价格)的最佳策略是什么 我遇到了一个关于使用本地化、分隔符、精确数字等显示货币的问题 然而,当我们必须弄清楚数据库中存储的值是否应该包括本地化分隔符/精度数字,或者是否应该规范化时。解决方案包括本地化值的显示,以及潜在地规范化数据库中存储的值。但我不确定这是否是标准做法(清除数据以符合“标准”精度和分隔符,或者修改模型以接受“货币”字段,并保留输入标准) 案例研究: 如果来自美国的产品(使用“en”本地化文件)定价为2.99,则它将作为2.

在本地化货币环境中存储电子商务产品信息(即产品价格、当前价格)的最佳策略是什么

我遇到了一个关于使用本地化、分隔符、精确数字等显示货币的问题

然而,当我们必须弄清楚数据库中存储的值是否应该包括本地化分隔符/精度数字,或者是否应该规范化时。解决方案包括本地化值的显示,以及潜在地规范化数据库中存储的值。但我不确定这是否是标准做法(清除数据以符合“标准”精度和分隔符,或者修改模型以接受“货币”字段,并保留输入标准)

案例研究:

如果来自美国的产品(使用“en”本地化文件)定价为2.99,则它将作为2.99存储在数据库中。 如果网站更新为德国本地化(使用“de”本地化文件),则其价格为2,99。 但是,该价格(和成本价格)值的更新是否应存储为2.99或2,99?如果它们存储为2.99,并且该值从模型返回到视图,则本地化会将该值修改为2,99

我不敢在用户不知情的情况下标准化用户输入。标准化货币值是正常的,还是模型应该改变以处理多种货币格式

另一个需要注意的问题是,尽管Spree引擎可以改变本地化,但我认为它还不能根据用户需求而改变。因此,我认为从技术上讲,它不是一个“多货币”环境?我想选择一个可以扩展的环境

相关问题:


  • 问题是,你有一种产品,在不同的汇率制度下以不同的文化销售。比如说,在美国是1450.00美元,在德国是1111.11欧元。有两个主要因素:

    A.不同货币的价格不同
    B.在不同的文化中,有不同的方式来显示货币金额

    关于A,你可以

    • 以一种价格/货币存储,并动态调整以适应不同的汇率
    • 或者每晚调整
    • 或者只是在不同的国家有不同的价格
    我会选择一个按货币分类的价格表。每晚更新可能是合理的:

    ProductId  Currency  Price
    1          EUR       1111.11
    1          CAD       1436.65
    1          USD       1450.00
    
    这些值应该是数字,以便在必要时可以轻松地对其进行计算。在数据库中使用十进制(10,2)

    关于B

    您应该在显示时将所选价格格式化为给定的区域性。想象一个美国人以欧元支付。他们想看到什么?您的输出将如下所示,具体取决于所选区域性:

    假设是1111.11欧元

    Culture  Price    Long Name
    de_de   1.111,11  (German)
    fr_ca   1 111,11  (Quebec)
    en_us   1,111.11  (US English)
    
    这都是相同的数量,只是格式不同,取决于用户的喜好

    如果用户输入的金额不同,您还必须根据所选的区域性分析他们的值

    注:

    无论你做什么,都不要将其存储为浮点数,否则随着时间的推移会出现细微的错误。请使用十进制类型


    考虑在计算结果字段的小数点后使用4位数字

    ,因此应将其存储为2.99而不是2,99?并且将数字和精度标准化为一种格式?您不必担心存储中的格式。向用户显示格式。如果他是德国人,则为德国人格式化。如果他是美国人,则为其格式化对于美国人来说。我认为这个答案并没有太大帮助。如果一个德国用户以典型的德国方式输入价格“2,99”,任何应用程序如何将其转换为“2.99”的“正确”数字?覆盖模型上的setter方法?我希望社区其他人提供更多的输入。也许我应该重新提出这个问题?我假设他们会使用“规范化”方法将值与用户的任何“本地化”输入进行比较,以将值与数据库中的标准值进行比较(即使用小数表示精度的数字).我研究发现,将数据模型扩展为与“价格”关联的“国家代码”是一种常见做法.但我不想修改太多模型,特别是因为该解决方案无助于报告和计算。谢谢你,尼尔。只是想澄清一下,你是说你应该扩展模型/数据库,将常规价格作为数字(即2.99)以及国家货币id(即美元/德国)包括在内吗和用户输入的货币值(即2.99、2、99等)