【问题标题】:ActiveRecord Sum is showing strange digitsActiveRecord Sum 显示奇怪的数字
【发布时间】:2014-03-20 05:21:26
【问题描述】:

.sum 显示疯狂的数字,当我添加或删除行时会发生变化,当我在该列中输入金额时,我无法解释这些数字。列类型为十进制。

这是我的专栏:

这是显示的总和:

这是显示的金额列,我没有将其转换为字符串。

<td><%= event.amount %></td>

这是显示的总和。

<td><%= @events.sum :amount %></td>

【问题讨论】:

  • 您使用的是哪个数据库?
  • 你能显示生成的查询吗?
  • 求和查询是 SELECT SUM("events"."amount") AS sum_id FROM "events" WHERE "events"."user_id" = ? [["user_id", 5]]

标签: ruby-on-rails activerecord


【解决方案1】:

由于 sqlite 使用 IEEE 浮点数(请参阅 sqlite data types)十进制数不能完美表示。

通常的处理方法是,将结果四舍五入到小数点后两位。

this answer:

在rails中使用圆形或视图助手number_with_precision

<td><%= event.amount.round(2) %></td>

<td><%= number_with_precision event.amount, precision: 2  %></td>

【讨论】:

  • sqlite 如何摆脱这种可怕的攻击?我是唯一一个尝试在 sqlite 数据库中存储小数的人吗?
  • 可怕的冒犯只是一种意见。 IEEE 二进制浮点数(快速、硬件加速、标准)以及十进制数(主要是在处理货币值或任意精度时)都有充分的理由。 Sqlite 专注于轻量级(嵌入式数据库),因此使用已经存在的浮点算法是合理的。不推荐用于 Rails 生产系统。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 2014-02-12
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多