mysql decimal和tinyint乘法精度

时间:2013-07-14 00:57:15

标签: mysql

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

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

在我正在执行的选择查询中

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

此计算是否精确计算(使用定点算法)?或者我是否需要担心舍入/精度损失等?

3 个答案:

答案 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个。