bcmath 似乎对我的计算给出了错误的答案

1 php bcmath

我不确定我做错了什么,但是这个计算

bcscale(20);
echo bcmul(bcdiv('422218', '2388865'), '473');
Run Code Online (Sandbox Code Playgroud)

回应“83.59999999999999999670”但其他所有计算器都给我83.6。

有没有办法解决这个问题,还是 bcmath 中的一个缺陷?

Eel*_*vex 5

你看到这个结果的原因是因为你首先执行了除法。

该部门为您提供:

422218/2388865
0.17674418604651162790697674418604651163
Run Code Online (Sandbox Code Playgroud)

但是您要求输入20位数字,因此变为0.1767441860465116279. 有鉴于此, bc 现在为您提供正确的结果:

0.1767441860465116279*473
83.5999999999999999967
Run Code Online (Sandbox Code Playgroud)

在这种情况下,一个“解决方案”是先执行乘法(它只给你 9 位数字),然后除法:

bcscale(20);
echo bcdiv(bcmul('422218','473'),'2388865');
83.60000000000000000000
Run Code Online (Sandbox Code Playgroud)