当我尝试获得余数时,它会给出无效值。我试图得到两个小数值,我得到了
3.4694469519536E-18
我的价值观
$x=0.1; $y=0.005;
我尝试了以下内容:
echo $ed = fmod(0.1,0.005); OutPut:3.4694469519536E-18
echo $ed = ((floatval(0.1)) % (floatval(0.005)));
但是
Warning: Division by zero
但实际为0.1将在 20 次除以0.005。即0.1/0.005 = 20
当我使用10%1 = 0
时,相同的函数返回正确的值。
我怎样才能得到确切的余数。 (我不会在JQuery中遇到同样的问题:))
答案 0 :(得分:3)
%
运算符只适用于整数,因此它会将浮点数截断为整数并尝试执行0 % 0
,这会导致除以零。
您唯一可以使用的是fmod()
。您在这里遇到的问题是典型的浮点不精确(值为"接近"零)。我考虑忽略小于10 ^ -15的值。在PHP中没有真正的替代方案。
你可以尝试做的是真正的分裂,然后,有点运气的不精确的痕迹消失。 (如round(0.1 / 0.005) === 0.1 / 0.005
)