Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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 5.5+中的舍入错误?_Mysql_Rounding - Fatal编程技术网

Mysql 5.5+中的舍入错误?

Mysql 5.5+中的舍入错误?,mysql,rounding,Mysql,Rounding,我有一个奇怪的取整问题 下面是MySQL5.5Percona的设置;Mysql 5.7 CE中相同: CREATE TABLE `roundingtest` ( `RT_Double` DOUBLE NULL DEFAULT NULL, `RT_Float` FLOAT NULL DEFAULT NULL, `RT_Decimal` DECIMAL(10,3) NULL DEFAULT NULL ) ENGINE=InnoDB; 现在输入3个字段中的每一个1.785 现在执行此查询: SELE

我有一个奇怪的取整问题

下面是MySQL5.5Percona的设置;Mysql 5.7 CE中相同:

CREATE TABLE `roundingtest` (
`RT_Double` DOUBLE NULL DEFAULT NULL,
`RT_Float` FLOAT NULL DEFAULT NULL,
`RT_Decimal` DECIMAL(10,3) NULL DEFAULT NULL
)
ENGINE=InnoDB;
现在输入3个字段中的每一个1.785

现在执行此查询:

SELECT
1.785, ROUND(1.785, 2),
RT_Double, ROUND(RT_Double, 2),
RT_Float, ROUND(RT_Float, 2),
RT_Decimal, ROUND(RT_Decimal, 2)
FROM roundingtest
结果如下:

如果四舍五入到小数点后一位:

请有人解释一下这种行为


只有小数字段才正确,即使只有3位小数。

这可能是由于浮点在计算机上的保存方式,由于保存在基数2而不是基数10中,所以不完全准确。如果将1.785另存为1.784998,则会向下取整。如果将其保存为1.785001,则会进行四舍五入。

这可能是由于浮点在计算机上的保存方式,由于保存在基数2而不是基数10中,因此不完全准确。如果将1.785另存为1.784998,则会向下取整。如果将其保存为1.785001,则它将向上取整。

来自:

对于近似值数字,结果取决于C库。在许多系统中,这意味着舍入使用“舍入到最接近的偶数”规则:具有任何小数部分的值舍入到最接近的偶数整数

这意味着浮点数可以向最近的偶数整数舍入。十进制数被认为是精确的,因此0.5或以上的小数部分被四舍五入。

来自:

对于近似值数字,结果取决于C库。在许多系统中,这意味着舍入使用“舍入到最接近的偶数”规则:具有任何小数部分的值舍入到最接近的偶数整数

这意味着浮点数可以向最近的偶数整数舍入。十进制数被认为是精确的,因此0.5或更多的小数部分被四舍五入