Mysql 5.5+中的舍入错误?
我有一个奇怪的取整问题 下面是MySQL5.5Percona的设置;Mysql 5.7 CE中相同: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
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或更多的小数部分被四舍五入