MySQL中的精确小数除法



如何在MySQL中正确地划分两个DECIMAL值,并得到精确到列类型中定义的位数的结果?

示例:

select cast(1/2 as decimal(4,4)),
cast(1 as decimal(4,4))/2,
cast(1 as decimal(4,4))/cast(2 as decimal(4,4));

结果:

'0.5000', '0.49995000', '1.00000000'

为什么第二个结果不准确?为什么第三个结果不是"0.5000"?

注意:我不能只使用第一种形式,我需要使用存储为小数的列进行计算。

问题是DECIMAL数据类型声明需要两个参数,第一个是数字总数,包括小数部分。

根据文件(http://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html):

DECIMAL列的声明语法为DECIMAL(M,D)。这个MySQL 5.1中参数的值范围如下:

M是最大位数(精度)。它的范围为1至65。(MySQL的旧版本允许1到254的范围。)

D是小数点右边的位数(比例)。它的范围为0到30,并且必须不大于M。

因此,如果你使用5个总数字而不是4,一切都可以:

select cast(1/2 as decimal(5,4)),
cast(1 as decimal(5,4))/2,
cast(1 as decimal(5,4))/cast(2 as decimal(5,4)),
cast(cast(1 as decimal(5,4))/cast(2 as decimal(5,4)) as decimal(5,4));

结果

0.5000, 0.50000000, 0.50000000, 0.5000

相关内容

  • 没有找到相关文章

最新更新