我的mysql版本为:8.1.0
我在mysql使用sum对数据统计后使用round函数进行四舍五入取整,发现像16.145这样的数字取小数后2位后是16.14而非16.15。
sql:
结果:
发现score字段是字符串类型,于是我做了以下测试:
select round(16.125,2) from dual
执行结果为:16.13
select round('16.125',2) from dual
执行结果为:16.12
所以结论是:mysql隐式转换会有问题!
在设计表的时候,最好设置数字类型字段为DECIMAL,不然会导致后续的其他不可预料的问题!
使用CAST函数对字符串进行手动转换
CAST语法为:
CAST(expression AS TYPE);
type 可以有:BINARY,CHAR,DATE,DATETIME,TIME,DECIMAL,SIGNED,UNSIGNED
示例:
# 使用cast转换成DECIMAL并指定精度
select cast('16.125' as DECIMAL(10,8) ) as num
# 再使用ROUND四舍五入
select round(cast('16.125' as DECIMAL ),2) from dual