在MySQL中,将1转换为十进制返回0.9999而不是1.0000

时间:2016-08-28 03:23:44

标签: mysql casting

在MySQL中将1转换为十进制时,我期待1.0000,但输出为0.9999

这到底发生了什么?

SELECT CAST(1 AS DECIMAL(4,4))

3 个答案:

答案 0 :(得分:5)

MySQL将转换后的值剪切为适合目标类型的最大值。 decimal(4, 4)不会在小数点左侧分配任何有效数字。

仅当服务器未运行documentation中所述的严格模式时,此强制转换才会导致溢出。

答案 1 :(得分:3)

超出范围

例如,DECIMAL(5,2)存储五位数和两位小数的任何值,其范围为-999.99到999.99。

SELECT CAST(1 AS DECIMAL(5,4)) -> 1.0000
SELECT CAST(1 AS DECIMAL(4,3)) -> 1.000
SELECT CAST(0.0001 AS DECIMAL(4,4)) -> 0.0001
SELECT CAST(0.00001 AS DECIMAL(4,4)) -> 0.0000
SELECT CAST(12345 AS DECIMAL(5,4)) -> 9.9999

更多信息:

https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html https://dev.mysql.com/doc/refman/5.7/en/fixed-point-types.html

答案 2 :(得分:1)

当您尝试将整数(在您的情况下,其值为1)转换为十进制数 DECIMAL(n,m)时,精度n即数字总数(在你的情况下n = 4)和比例为m,即小数点后的位数(在你的情况下m = 4)

所以在你的情况下,十进制数的范围是(-0.9999到0.9999)

所以当你尝试转换任何整数> 0 它将转换为0.9999 (最大可能值)

当你尝试转换任何整数< 0 它将转换为-0.9999 (最小可能值)

如果服务器以严格模式运行,这种转换将导致错误。