MySQL TRUNCATE(double,4)是修改值而不是截断
我试图用4个小数截断一个双精度,但是我得到了最后一个四舍五入的数字(双精度只有4个小数!) 双重: -2.5805 结果: -2.5804 更有趣的是:MySQL TRUNCATE(double,4)是修改值而不是截断,mysql,Mysql,我试图用4个小数截断一个双精度,但是我得到了最后一个四舍五入的数字(双精度只有4个小数!) 双重: -2.5805 结果: -2.5804 更有趣的是: SELECT TRUNCATE(mycol, 4) AS col1, TRUNCATE(-2.5805, 4) AS col2 FROM mytable 返回: col1 | col2 --------+-------- -2.5804 | -2.5805 双精度数据类型是浮点类型,这意味着这些数字不会存储为精确的数字。正如MySQ
SELECT TRUNCATE(mycol, 4) AS col1, TRUNCATE(-2.5805, 4) AS col2
FROM mytable
返回:
col1 | col2
--------+--------
-2.5804 | -2.5805
双精度数据类型是浮点类型,这意味着这些数字不会存储为精确的数字。正如MySQL文档中所解释的: 因为浮点值是近似值,而不是存储为精确值 如果在比较中试图将其视为精确值,则可能导致 问题。它们也受平台或实施的影响 依赖关系 这意味着数字
-2.5805
存储为双精度时不是精确数字。但是,truncate()函数返回一个精确的数字和精确的位数。当-2.5805
(双精度)展开时,第四位小数为4
TRUNCATE(-2.5805,4)
表达式返回-2.5805
,因为MySQL将其视为十进制数据类型,这是一种精确的数据类型。因此,truncate()
函数只返回相同数量的十进制数字
col1 | col2
--------+--------
-2.5804 | -2.5805