在 mysql 5.1 中,我有一个包含两列的表
create table t1 {
price decimal(6,2),
quantity tinyint(4),
...
}
在我正在做的选择查询中
select sum(price * quantity)
from t1
group by ...
这个计算是精确计算(使用定点算术)吗?还是我需要担心舍入/精度损失等?
在 mysql 5.1 中,我有一个包含两列的表
create table t1 {
price decimal(6,2),
quantity tinyint(4),
...
}
在我正在做的选择查询中
select sum(price * quantity)
from t1
group by ...
这个计算是精确计算(使用定点算术)吗?还是我需要担心舍入/精度损失等?
我相信将小数与整数相乘时没有精确的损失。请参阅精密数学示例。我还做了一个小实验来看看浮点数和小数之间的区别:
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
计算结果非常好,并且不失精度。
例如,请参见此处: http ://sqlfiddle.com/#!2/173cf/1/0
但是您的 tinyint(4) 可能会遇到麻烦。尽管有 (4),但它的范围为 [-128, 127]。看这里。http://dev.mysql.com/doc/refman/5.0/en/integer-types.html
将精度为 2 的小数乘以任何整数(int 或 tinyint)时,您不必担心会丢失任何额外的精度——结果中的小数位不会超过 2 位。