在PHP中确定$x是否可以均匀分配$y
发布时间:2020-12-13 17:36:52 所属栏目:PHP教程 来源:网络整理
导读:我只想知道$x是否可以被$y整除.例如,假设: $x = 70;$y = .1; 我尝试的第一件事是: $x % $y 这两个数字都是整数,但是如果它们不是,则失败,如果$y是小于1的小数,则返回“除零”错误,那么我尝试: fmod($x,$y) 这返回同样令人困惑的结果,“0.099999999999996
我只想知道$x是否可以被$y整除.例如,假设:
$x = 70; $y = .1; 我尝试的第一件事是: $x % $y 这两个数字都是整数,但是如果它们不是,则失败,如果$y是小于1的小数,则返回“除零”错误,那么我尝试: fmod($x,$y) 这返回同样令人困惑的结果,“0.099999999999996”. php.net声明fmod():
根据我的计算器70 / .1 = 700.这意味着余数是0.有人可以解释我做错了什么吗?
一个解决方案是进行正常划分,然后将该值与下一个整数进行比较.如果结果是整数或非常接近该整数,则结果是均匀可分的:
$x = 70; $y = .1; $evenlyDivisable = abs(($x / $y) - round($x / $y,0)) < 0.0001; 这样减去数字并检查绝对差值是否小于某个舍入误差.这是比较浮点数的通常方法,具体取决于您如何获得浮点数,表示可能会有所不同: php> 0.1 + 0.1 + 0.1 == 0.3 bool(false) php> serialize(.3) 'd:0.29999999999999999;' php> serialize(0.1 + 0.1 + 0.1) 'd:0.30000000000000004;' 看这个演示: php> $x = 10; int(10) php> $y = .1; double(0.1) php> abs(($x / $y) - round($x / $y,0)) < 0.0001; bool(true) php> $y = .15; double(0.15) php> abs(($x / $y) - round($x / $y,0)) < 0.0001; bool(false) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |