此查询:
SELECT CAST(30.123456789012345 AS DECIMAL(16,16))
返回0.9999999999999999
。
除非我完全错误,否则应该返回30.1234567890123450
。
有人可以解释一下发生了什么吗?
谢谢!
答案 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使用所有数字作为十进制数字,没有任何整数部分。