mysql统计函数round失效问题

目录

1、问题

我的mysql版本为:8.1.0

我在mysql使用sum对数据统计后使用round函数进行四舍五入取整,发现像16.145这样的数字取小数后2位后是16.14而非16.15。

sql:
在这里插入图片描述
结果:
在这里插入图片描述

2、找到原因

发现score字段是字符串类型,于是我做了以下测试:

select round(16.125,2) from dual

执行结果为:16.13

select round('16.125',2) from dual

执行结果为:16.12

所以结论是:mysql隐式转换会有问题!
在设计表的时候,最好设置数字类型字段为DECIMAL,不然会导致后续的其他不可预料的问题!

3、解决办法

使用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

4、类似问题欢迎品论区补充~

相关推荐

  1. MySQLMySQL索引失效场景

    2023-12-26 04:48:02       28 阅读
  2. 设置失效时间失效问题

    2023-12-26 04:48:02       32 阅读
  3. mysql统计数据库大小

    2023-12-26 04:48:02       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-26 04:48:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-26 04:48:02       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-26 04:48:02       82 阅读
  4. Python语言-面向对象

    2023-12-26 04:48:02       91 阅读

热门阅读

  1. 算法笔记—二叉树遍历

    2023-12-26 04:48:02       51 阅读
  2. 输出从0-n的水仙花数

    2023-12-26 04:48:02       56 阅读
  3. 《重构-改善既有代

    2023-12-26 04:48:02       41 阅读
  4. K8S Pod Terminating/Unknown故障排查

    2023-12-26 04:48:02       45 阅读
  5. RFC3261: SIP: 会话发起协议目录

    2023-12-26 04:48:02       69 阅读
  6. go ioc三方库推荐

    2023-12-26 04:48:02       49 阅读
  7. GO语言基础笔记(五):包的介绍

    2023-12-26 04:48:02       54 阅读
  8. 实现 Trie (前缀树)

    2023-12-26 04:48:02       60 阅读
  9. Canny函数opencv

    2023-12-26 04:48:02       52 阅读