mysql,ceil(451*1.0/30)=15,ceil(451*1.00/30)=16,为什么?

问题描述 投票:0回答:1

mysql,ceil(451 x 1.0 / 30)=15, ceil(451 x 1.00 / 30)=16,为什么?

我想知道为什么会发生这种情况。我该如何解决它?

这与浮点数的参数化有关吗?结果是 451*1.0 = 451,一个整数,而不是 451.0

mysql ceil
1个回答
0
投票
SET @value = 1.0;
SELECT CEIL(451 * @value / 30); -- Outputs: 15

SET @value = 1.00;
SELECT CEIL(451 * @value / 30); -- Outputs: 16

输出的差异是由于浮点数以二进制格式存储和操作的方式造成的。十进制值 1.0 和 1.00 的二进制表示略有不同,这导致计算结果存在微小差异。

要解决此问题,您可以更改计算以使用整数除法,这将为您提供输入参数的整数:

SELECT CEIL((451 *10) / 30); -- Outputs: 15

在这种情况下,1.0 和 1.00 在乘法过程中都转换为整数,导致计算中使用相同的值。这将为您提供一致的 CEIL 函数结果。

请注意,使用整数除法(// 而不是 /)也将通过对结果进行舍入而不是使用浮点精度来提供一致的结果。然而,对于

CEIL

函数,当前使用整数乘法的方法应该足够了。

© www.soinside.com 2019 - 2024. All rights reserved.