在MySQL中将1转换为十进制时,我期待1.0000
,但输出为0.9999
。
这到底发生了什么?
SELECT CAST(1 AS DECIMAL(4,4))
答案 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 (最小可能值)
如果服务器以严格模式运行,这种转换将导致错误。