繁体   English   中英

MySQL 将 round() 中的小数限制为少于预期

[英]MySQL limits decimals in round() to fewer than expected

我有两个不同的 MySQL 服务器,当我在两个服务器上运行以下查询时,我得到不同的结果:

SELECT round(1/3,6) -- 0,333333 on Server1
SELECT round(1/3,6) -- 0,3333   on Server2

第一个给出了预期的 6 位小数,第二个只给出了 4 位小数。

SELECT format(round(1/3,6),6) -- 0,333333 on Server1
SELECT format(round(1/3,6),6) -- 0,333300 on Server2

SELECT round(cast(1 as float)/3,6) -- 0,333333 (6 decimals) on both

SELECT 1/3 -- 0,3333 (4 decimals) on both as expected

MySQL 版本在 Server1 上为 8.0.18-9,在 Server2 上为 8.0.26-17。 两台服务器上的 div_precision_increment = 4。

更新:

这是一个 mysql 版本问题 - 当更新到 8.0.26 时,两台服务器都有同样的问题。 但我认为 8.0.26 的行为存在问题。

在 8.0.27 中有一个可能解决此问题的错误修复说明:

将类型从 integer 转换为十进制时,否定的类型解析没有设置正确的精度。 这是通过分配与参数相同的精度来解决的。 (缺陷号 32863037)

但是 Percona 目前不提供该更新,所以我尝试降级然后等待 8.0.27+

更新:

这个是版本错误,更新8.0.18服务器的版本到同一个版本

它是一个服务器变量

SET div_precision_increment = 6;

将更改为 session 的位数。 此变量指示要将使用 / 运算符执行的除法运算结果的小数位数增加的位数。 默认值为 4。最小值和最大值分别为 0 和 30。 以下示例说明了增加默认值的效果。

更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM