Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL TRUNCATE(double,4)是修改值而不是截断_Mysql - Fatal编程技术网

MySQL TRUNCATE(double,4)是修改值而不是截断

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

我试图用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

双精度数据类型是浮点类型,这意味着这些数字不会存储为精确的数字。正如MySQL文档中所解释的:

因为浮点值是近似值,而不是存储为精确值 如果在比较中试图将其视为精确值,则可能导致 问题。它们也受平台或实施的影响 依赖关系

这意味着数字
-2.5805
存储为双精度时不是精确数字。但是,truncate()函数返回一个精确的数字和精确的位数。当
-2.5805
(双精度)展开时,第四位小数为4

TRUNCATE(-2.5805,4)
表达式返回
-2.5805
,因为MySQL将其视为十进制数据类型,这是一种精确的数据类型。因此,
truncate()
函数只返回相同数量的十进制数字

col1    |  col2
--------+--------
-2.5804 | -2.5805