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

nfm*_*nfm 5 mysql sqlite precision ruby-on-rails decimal

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

这没有按预期运行。如果我使用 保存一条记录:rate => 10.50,它将作为10.5. 另外,当我在表单字段中输出值时,它显示为10.5

我不想每次想在 Rails 表单中很好地显示值时都进行黑客字符串格式化。

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

编辑:

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

- form_for @project do |f|
  = f.text_field :rate
Run Code Online (Sandbox Code Playgroud)

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

def formatted_rate
  "%.2f" % rate
end

= f.text_field :formatted_rate
Run Code Online (Sandbox Code Playgroud)

是否有任何其他常见技巧来强制输出格式,并且仍然使用默认的 Rails 表单生成器?

nfm*_*nfm 1

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

您可以在 中定义您的格式( 的参数number_with_precisionconfig/initializers/currency_text_field_initializer.rb

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

与显式设置相同的方法value,但是这一切都是在幕后进行的,并且已命名为number_with_precision.