【发布时间】:2011-04-27 05:58:44
【问题描述】:
我想将货币存储在我的(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 表单构建器吗?
【问题讨论】:
-
对视图进行编码以将数字显示到小数点后两位并没有什么“hacky”;这是理想的解决方案。当您指定小数精度时,您指定的是最大值,而不是最小值 - 数字永远不会与尾随或前导零一起存储。
-
虽然不是完全重复,但这些答案几乎都适用:stackoverflow.com/questions/591939/…
标签: mysql ruby-on-rails sqlite decimal precision