如何配置Rails以在表单字段中以正确的精度输出小数?

时间:2010-10-19 00:46:42

标签: mysql ruby-on-rails sqlite decimal precision

我想在我的(sqlite和mysql)数据库中存储货币。我正在尝试使用decimal列类型,:scale => 2

这不符合预期。如果我使用:rate => 10.50保存记录,它将作为10.5存储在我的sqlite数据库中。此外,当我在表单字段中输出值时,它显示为10.5

每次我想在Rails表单中很好地显示值时,我不想做hacky字符串格式化。

有没有办法解决这个问题?这是一个sqlite的事吗?我是否误解了decimal列类型?

修改

为了澄清,我希望能够使用通常的表单生成方法:

- form_for @project do |f|
  = f.text_field :rate

如果我必须显式格式化输出,我将不得不为每个十进制属性创建额外的方法:

def formatted_rate
  "%.2f" % rate
end

= f.text_field :formatted_rate

是否还有其他常用技巧来强制输出格式化,仍然使用默认的Rails formbuilder?

2 个答案:

答案 0 :(得分:4)

您可以使用Rails ActionView Number Helper number_with_precision

number_with_precision(my_number, :precision => 2)

答案 1 :(得分:1)

我最终编写了一个插件来执行此操作:currency_text_field

您可以在number_with_precision中定义格式(config/initializers/currency_text_field_initializer.rb的参数)。

然后在表单中使用f.currency_text_field :rate,并使用可选的:format参数在初始值设定项中使用命名格式。否则,它使用初始化程序中的format[:default]

与明确设置value的方法相同,但在幕后完成,并为number_with_precision命名了一组选项。