0

我正在构建一个类,用于在 PHP 中处理任意精度的十进制数,在内部使用BCMath 库

当两个数字相加相减相乘时,可以预测所需的精度以确保不会丢失任何数字。

但是,当涉及到除法时,位数可以是无限的,如果除法的结果不能表示为有限位数,我希望我的库抛出异常。

在除法之前,我怎么知道结果是否是有限的,在这种情况下,如何计算结果的比例?

4

2 回答 2

1

您需要执行%(模数)操作...等等。哦,嘘……

实际上,不执行除法(或类似步骤)本身是不可能的。

我可能会建议您创建一个divmod函数,该函数将返回整数除法(即向下舍入)和余数的结果。并检查余数是否为零。

此外,任何有理数都可以表示为重复小数,例如1/3 = 0.(3)1/7 = 0.(142857)。不好的部分是周期长度可能达到这个数字的值,因此n/m如果想用有理数进行精确计算,最好将数字表示为内部。

于 2012-03-21T21:26:11.547 回答
0

如果分母的唯一质因数是 2 和 5,则缩减分数具有有限十进制表示。

使用 BCMath,我猜你必须实现欧几里得算法来将分数减少到最低项,然后测试分母。这似乎不值得麻烦。

于 2012-03-22T00:27:06.823 回答