ruby-on-rails - 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
解决方案
这里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
推荐阅读
- asp.net - 如何通过 ASP.NET 中的控制器在浏览器中打开 PDF 文件
- php - 使用 PHP ImageCreateFromJPEG() 不允许我重新创建图像:它生成一次并保存在服务器的缓存中,无论如何
- c++ - 打印以“a”开头的单词(在字符串中)
- sublimetext3 - Sublime Text 3 - 将默认“纯文本”设置为 HTML?
- typescript - Sequelize 在 Typescript 中扩展模型类
- r - 在 ggplot2 r 的散点图中标记最大/最小值
- sql - 如何从行列表中同一表中的另一列更新列?
- java - 使用 mockito 模拟剩余数据并生成 api doc
- mysql - 如何通过单个属性的值从数组中返回对象
- python - 在 django 应用程序中找不到页面错误