【发布时间】:2011-01-09 05:53:33
【问题描述】:
看着 SO,我发现使用 RoR 货币的首选方法是使用小数(8,2)并使用 number_to_currency() 输出它们;
我可以将我的号码从数据库中取出,但我在将它们输入时遇到了问题。
在我的更新操作中,我有以下行:
if @non_labor_expense.update_attributes(params[:non_labor_expense])
puts YAML::dump(params)
参数转储显示正确的值。 xx,yyy.zz ,但存储在数据库中的只有 xx.00
我需要做什么才能考虑到可能存在逗号并且用户可能无法输入 .zz(美分)。一些正则表达式和逗号?如果它是 .2 与 .20 ,你将如何处理小数。
必须有一个内置的或至少一个更好的方法。
我的迁移(我不知道这是否有帮助):
class ChangeExpenseToDec < ActiveRecord::Migration
def self.up
change_column :non_labor_expenses, :amount, :decimal, :precision => 8, :scale => 2
end
def self.down
change_column :non_labor_expenses, :amount, :integer
end
end
【问题讨论】:
-
.2 和 .20 是同一个数字,所以存储方式无关紧要,重要的是显示方式。
-
对。第一个问题是我在逗号后丢失了数据。您是说一旦我解决了这个问题,.2 和 .20 将自行解决它在数据库中的存储方式?
-
看我的回答;基本上,您将数据库中的数字存储为直接(未格式化)十进制数,然后在需要显示时根据需要对其进行格式化。
标签: ruby-on-rails decimal numbers currency