3

在 mysql 5.1 中,我有一个包含两列的表

create table t1 {
  price decimal(6,2),
  quantity tinyint(4),
  ...
}

在我正在做的选择查询中

select sum(price * quantity)
from t1
group by ...

这个计算是精确计算(使用定点算术)吗?还是我需要担心舍入/精度损失等?

4

3 回答 3

2

我相信将小数与整数相乘时没有精确的损失。请参阅精密数学示例。我还做了一个小实验来看看浮点数和小数之间的区别:

SELECT .1E0 * .1E0, 
       .1 * .1, 
       (.1E0 * .1E0) * 10, 
       (.1 * .1) * 10

输出是

0.010000000000000002          << .1E0 * .1E0
0.01                          << .1 * .1
0.10000000000000002           << (.1E0 * .1E0) * 10
0.10                          << (.1 * .1) * 10
于 2013-07-14T01:22:44.247 回答
2

计算结果非常好,并且不失精度。

例如,请参见此处: http ://sqlfiddle.com/#!2/173cf/1/0

但是您的 tinyint(4) 可能会遇到麻烦。尽管有 (4),但它的范围为 [-128, 127]。看这里。http://dev.mysql.com/doc/refman/5.0/en/integer-types.html

于 2013-07-14T01:23:38.693 回答
0

将精度为 2 的小数乘以任何整数(int 或 tinyint)时,您不必担心会丢失任何额外的精度——结果中的小数位不会超过 2 位。

于 2013-07-14T01:22:41.263 回答