当我尝试获取余数时,它给出的值无效。我试图得到剩余的两个十进制值
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将被0.005除以20倍。即
0.1/0.005 = 20
当我使用
10%1 = 0
时,相同的函数返回正确的值。我怎样才能得到确切的余数。(我在jquery中没有遇到相同的问题:))
查看解决方案:PHP Division Float Value WorkAround
最佳答案
%
运算符只处理整数,因此它会将浮点截断为整数并尝试执行0 % 0
,这会导致被零除。
你唯一能用的就是fmod()
。这里您面临的问题是典型的浮点不精确性(值“接近”零)。我会考虑忽略小于10^-15的值。在php中没有真正的替代方法。
你可以试着做真正的除法,然后,带着一点运气,不精确的痕迹消失了。(就像round(0.1 / 0.005) === 0.1 / 0.005
)