rails decimal scale => 2不工作

Rya*_*lay 1 ruby-on-rails ruby-on-rails-4

我有一个像这样的产品专栏:

t.decimal :price, :precision => 12, :scale => 2
Run Code Online (Sandbox Code Playgroud)

并且它保持返回500.0而不是预期的两位小数500.00.然后我尝试通过控制台手动更改产品价格,它只会节省1位小数.

>product.price = 500.00
=> 500.0
>product.price
=> #<BigDecimal:7ff479c6ba40,'0.5E3',9(36)>
Run Code Online (Sandbox Code Playgroud)

如何获取十进制列以保存并返回两位小数?

ami*_*hle 5

scale指定在数据库中保留小数点后的位数.保存1.234将舍入到1.23,500.00将存储为500.00.

在Ruby on Rails中,它们将被表示为BigDecimal.该BigDecimal会不知道这是在数据库中使用的格式.如果它的值是500.0,它的to_s方法将输出它,500.0因为它足够准确.

要将值格式化为货币,请使用number_to_currency辅助方法.

另请参见Ruby on Rails的:处理货币/钱最好的方法是否红宝石有任何数字格式类?