2

我想知道一个实数是否是另一个实数的倍数。我正在使用 BC-Math,因为代码是进行价格计算的更大系统的一部分,并且由于浮点数学的行为,使用浮点数会导致多次计算的错误结果。

BC-Math 必须bcmod()获得任意精度数的模数。但是,在 PHP 7.2 之前,此函数不适用于非整数数字字符串。例如:

echo bcmod('10', '9.2'); // 1, because '9.2' is truncated to '9'

将数字转换回浮点数并使用fmod()不是一个选项,因为fmod 函数返回错误的结果

我找不到这个问题的任何解决方案,但我无法想象没有解决方案。

编辑:

以后遇到同样问题的读者您好!根据@chiliNUT 的回复,我为bcmath 扩展库创建了一个拉取请求。

4

1 回答 1

2

我认为可以使用一些数学来完成:

您可以与此等mod(a,b)a相关联b

a = b * floor(a/b) + mod(a,b)

解释

然后求解该方程以使 mod 产生

mod(a,b) = a - b * floor(a/b)

替换你得到的数字

mod(10,9.2) = 10 - 9.2 * floor(10/9.2) = 0.8

另请参阅此处以了解 bcmath 楼层实施:如何计算上限、下限和四舍五入 bcmath 数字?

于 2017-10-10T15:13:41.053 回答