在mysql 5.1中,我有一个包含两列的表
create table t1 {
price decimal(6,2),
quantity tinyint(4),
...
}
在我正在执行的选择查询中
select sum(price * quantity)
from t1
group by ...
此计算是否精确计算(使用定点算法)?或者我是否需要担心舍入/精度损失等?
答案 0 :(得分:2)
我相信乘以十进制和整数时没有精确的损失。见Precision Math Examples。我还做了一个小实验,看看浮点数和十进制之间的差异:
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
答案 1 :(得分: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
答案 2 :(得分:0)
当使用任何整数(int或tinyint)将精度为2的十进制乘以时,您不必担心会丢失任何额外的精度 - 结果中的小数位数不会超过2个。