您好我正在尝试构建一个函数来检查数字是否是另一个的倍数:
我想要得到的东西:
my_function (10,2) = true
my_function (8,3) = false
my_function (9.5,0.5) = true
my_function (6,1.5) = true
my_function (1.1,0.1) = true
我的功能是:
//Check if $number1 is a multiple of $number2
function my_function( $number1, $number2 ){
$_number = $number1 / $number2;
if( $_number == floor( $_number ) ) :
return true;
else :
return false;
endif;
}
它的工作方式就像一个魅力,除了由于某些原因,当有值3,7,11等时它会返回false,当它应该清楚地返回true时:
my_function (5.4,0.3) = false (it is retruning false, it should be true!)
my_function (7.7,0.7) = false (it is retruning false, it should be true!)
知道为什么吗?这是编译器错误吗?我没有想法。谢谢
答案 0 :(得分:0)
由于floor
的结果类型是双倍且$_number
也是双倍,因此最安全的方式是进行相对比较<
而不是绝对比较。
浮动精度可能会有所不同。因此,这是最安全的方式:
if (abs(floor( $_number ) - $_number) < 0.00001) {
return true;
}
return false;