Mysql round函数四舍五入不正确

最近发现Mysqlround()函数 取整方式会因参数的类型会有所不同,例如参数类型为整数Decimal时,该函数会按照四舍五入规则正确取整。但是参数类型为Double时,会与正常四舍五入后的值不同。

差异
1
2
3
4
5
select
2.5,
25E-1,
round(2.5),
round(25E-1)

结果为

2.5 25E-1 round(2.5) round(25E-1)
2.5 2.5 3 2.0

图标

E:科学计数法(aEb = a×10^b

mysql 文档解释

round()函数根据其参数是精确的还是近似的取整方式不同:

  • 对于精确值数字,请 round()使用“四舍五入”规则:如果分数为0.5或更大的分数,则将其四舍五入到下一个整数(如果为正数)或四舍五入到下一个整数(如果为负数)。(换句话说,四舍五入为零。)小数部分小于.5的值如果为正则四舍五入到下一个整数,如果为负则四舍五入到下一个整数。(换句话说,它四舍五入为零。)
  • 对于近似值数字,结果取决于C库。在许多系统上,这意味着 round()使用“四舍五入到最接近的偶数”规则:小数部分位于两个整数中间的一半的值将四舍五入到最接近的偶数整数
结论

如四舍五入之后不正确 round之前检查该参数类型如为double 就是参数类型不正确的缘故。,工作中如涉及到小数精确尽量使用decimal 具体小数精度需参照实际情况设定

分享到