MySQL转换为十进制不按预期工作

时间:2013-04-14 10:23:51

标签: mysql sql decimal

此查询:

SELECT CAST(30.123456789012345 AS DECIMAL(16,16))

返回0.9999999999999999

除非我完全错误,否则应该返回30.1234567890123450

有人可以解释一下发生了什么吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

您需要DECIMAL(18,16)

16,16为小数点右侧的值保留所有16位精度数字。

答案 1 :(得分:1)

DECIMAL(18, 16)应该有效。正如您可以阅读MySQL manual

  

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

     

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

     

D是小数点右边的位数(   规模)。它的范围为0到30,且不得大于M.

所以DECIMAL(16,16)告诉MySQL使用所有数字作为十进制数字,没有任何整数部分。