首页 > 解决方案 > Rails 十进制字段未正确保存

问题描述

我的模型上有一个price: decimal字段,当我说 model.price = 10 时,我希望它是 20.0,但它节省的是0.02e2. 知道发生了什么吗?

迁移有这个:t.decimal :price 这就是我在 rails 控制台中所做的:

irb(main):019:0> app.price
=> 0.2e2
irb(main):020:0> app.price = 2000
=> 2000
irb(main):021:0> app.save!
   (0.3ms)  BEGIN
  MyModel Update (0.5ms)  UPDATE "my_model" SET "price" = $1, "updated_at" = $2 WHERE "my_models"."id" = $3  [["price", "2000.0"], ["updated_at", "2021-02-10 08:28:50.075958"], ["id", "44e7448f-0504-49cb-be76-55627fe57f1e"]]
   (33.0ms)  COMMIT
=> true
irb(main):022:0> app.price
=> 0.2e4

标签: ruby-on-railspsql

解决方案


这里e代表指数(尽管有些人可能更常将其称为)。

因为它是一个小数列,所以我们以十进制工作。

10 2 = 100

0.2 x 100 = 20。

所以它存储了20 个。如果你不熟悉这种东西,这并不是很明显。

返回的对象是一个BigDecimal. 在 Rails 控制台中,您可以证明它:

BigDecimal("20")
=> 0.2e2
BigDecimal("20").to_f
=> 20.0
BigDecimal("20").to_i
=> 20

推荐阅读