【问题标题】:Rails decimal field is not saving correctlyRails 十进制字段未正确保存
【发布时间】:2021-02-10 08:44:38
【问题描述】:

我的模型上有一个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-rails psql


    【解决方案1】:

    这里的e 代表指数(虽然有些人可能更普遍地知道它为)。

    因为它是 十进制 列,所以我们使用十进制。

    102 = 100

    0.2 x 100 = 20。

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

    返回的对象是BigDecimal。在 Rails 控制台中,您可以证明这一点:

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

    【讨论】:

    • 嗯,是的,编程至少需要基础数学:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 2023-03-04
    • 2018-11-19
    相关资源
    最近更新 更多