2017-10-10 56 views
2

我想知道一个实数是否是另一个的实数。我使用的是BC-Math,因为代码是执行价格计算的较大系统的一部分,并且由于浮点数学的行为而使用浮点数导致多个计算结果错误。使用BCMath获取两个实数的模

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

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

转换的数字回花车和使用fmod()是不是因为fmod function returning wrong result

选项我找不到任何解决这个问题,但我不能想象没有解决。

编辑:

你好读者谁遇到同样的问题未来!基于@ chiliNUT的回应,我为bcmath-extended库创建了一个pull-request

回答

2

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

你可以涉及mod(a,b)ab这个公式:

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

explanation

,然后解决方程mod to yield

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

代你的号码,你得到

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

在此还看到了bcmath时地板实现:How to ceil, floor and round bcmath numbers?

+1

我爱你的方法!但是,您的计算有错误。 mod(a,b)= a - b * floor(a/b)''而不是'mod(a,b)= a/b - b * floor(a/b)''。你会纠正你的答案,所以我可以接受吗? – Xatoo