猿问
下载APP

处理货币/货币的最佳方法是什么?

处理货币/货币的最佳方法是什么?

我正在研究一个非常基本的购物车系统。

我有一个items具有price类型列的表integer

我无法在包括欧元和美分在内的价格中显示价格值。就Rails框架中的处理货币而言,我是否遗漏了一些明显的东西?


慕前端131612
浏览 40回答 3
3回答

慕桂英546537

您可能希望DECIMAL在数据库中使用某种类型。在迁移中,执行以下操作:# precision is the total number of digits# scale is the number of digits to the right of the decimal pointadd_column :items, :price, :decimal, :precision => 8, :scale => 2在Rails中,:decimal类型返回为BigDecimal,这对于价格计算很有用。如果你坚持使用整数,你将不得不手动转换到BigDecimal任何地方,这可能只是一个痛苦。正如mcl所指出的,要打印价格,请使用:number_to_currency(price, :unit => "€")#=> €1,234.01

潇潇雨雨

对RoR开发中一些有抱负的初级/初学者的所有答案进行一点点更新和凝聚,这肯定会在这里得到一些解释。与钱合作用于:decimal在DB中存储资金,正如@molf建议的那样(以及我的公司在使用资金时用作黄金标准)。#&nbsp;precision&nbsp;is&nbsp;the&nbsp;total&nbsp;number&nbsp;of&nbsp;digits#&nbsp;scale&nbsp;is&nbsp;the&nbsp;number&nbsp;of&nbsp;digits&nbsp;to&nbsp;the&nbsp;right&nbsp;of&nbsp;the&nbsp;decimal&nbsp;pointadd_column&nbsp;:items,&nbsp;:price,&nbsp;:decimal,&nbsp;precision:&nbsp;8,&nbsp;scale:&nbsp;2几点::decimal将用于BigDecimal解决许多问题。precision并scale应根据您所代表的内容进行调整如果你使用收款和发送付款,precision: 8并scale: 2给你999,999.99最高金额,这在90%的情况下都没问题。如果您需要代表房产或稀有汽车的价值,您应该使用更高的价格precision。如果你使用坐标(经度和纬度),你肯定需要更高的坐标scale。如何生成迁移要使用上述内容生成迁移,请在终端中运行:bin/rails&nbsp;g&nbsp;migration&nbsp;AddPriceToItems&nbsp;price:decimal{8-2}要么bin/rails&nbsp;g&nbsp;migration&nbsp;AddPriceToItems&nbsp;'price:decimal{5,2}'正如本博文中所解释的那样。货币格式亲吻额外的图书馆并使用内置帮手。用number_to_currency@molf和@facundofarias建议。一起玩number_to_currency在Rails的控制台帮手,发出调用ActiveSupport的NumberHelper类,以访问帮手。例如:ActiveSupport::NumberHelper.number_to_currency(2_500_000.61,&nbsp;unit:&nbsp;'€',&nbsp;precision:&nbsp;2,&nbsp;separator:&nbsp;',',&nbsp;delimiter:&nbsp;'',&nbsp;format:&nbsp;"%n%u")给出以下输出2500000,61€检查其他options的number_to_currency帮手。把它放在哪里您可以将它放在应用程序帮助程序中,并在视图中使用它以获取任何数量。module&nbsp;ApplicationHelper&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;def&nbsp;format_currency(amount) &nbsp;&nbsp;&nbsp;&nbsp;number_to_currency(amount,&nbsp;unit:&nbsp;'€',&nbsp;precision:&nbsp;2,&nbsp;separator:&nbsp;',',&nbsp;delimiter:&nbsp;'',&nbsp;format:&nbsp;"%n%u") &nbsp;&nbsp;endend或者您可以将其Item作为实例方法放在模型中,并在需要格式化价格的地方(在视图或帮助程序中)调用它。class&nbsp;Item&nbsp;<&nbsp;ActiveRecord::Base &nbsp;&nbsp;def&nbsp;format_price &nbsp;&nbsp;&nbsp;&nbsp;number_to_currency(price,&nbsp;unit:&nbsp;'€',&nbsp;precision:&nbsp;2,&nbsp;separator:&nbsp;',',&nbsp;delimiter:&nbsp;'',&nbsp;format:&nbsp;"%n%u") &nbsp;&nbsp;endend并且,我如何使用number_to_currency内部控制器(注意negative_format选项,用于表示退款)的示例def&nbsp;refund_information &nbsp;&nbsp;amount_formatted&nbsp;=&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;ActionController::Base.helpers.number_to_currency(@refund.amount,&nbsp;negative_format:&nbsp;'(%u%n)') &nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;amount_formatted:&nbsp;amount_formatted, &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;... &nbsp;&nbsp;}end

慕丝7291255

Ruby&Rails的简单代码<%=&nbsp;number_to_currency(1234567890.50)&nbsp;%>OUT&nbsp;PUT&nbsp;=>&nbsp;$1,234,567,890.50
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答