为什么PHP在计算平均值时不返回正确的结果?

为什么PHP在计算平均值时不返回正确的结果?,php,Php,事实上,我正在尝试解析数组中的所有值是否相同。我尝试计算平均值,并将其与数组中的值进行比较。当我编写代码时,我收到了来自PHP的奇怪结果。有时是对的,有时不是 在我的本地版本php(5.6.10)中,我认为这是一些php错误。所以我在3v4l和PHPBox上测试它,这两个服务在所有PHP版本或HHVM中都得到相同的结果 有一些演示代码,我在做什么 <?php $arr[0] = array(1.01, 1.01, 1.01); $arr[1] = array(1.65, 1.65, 1.6

事实上,我正在尝试解析数组中的所有值是否相同。我尝试计算平均值,并将其与数组中的值进行比较。当我编写代码时,我收到了来自PHP的奇怪结果。有时是对的,有时不是

在我的本地版本php(5.6.10)中,我认为这是一些php错误。所以我在3v4l和PHPBox上测试它,这两个服务在所有PHP版本或HHVM中都得到相同的结果

有一些演示代码,我在做什么

<?php
$arr[0] = array(1.01, 1.01, 1.01);
$arr[1] = array(1.65, 1.65, 1.65);

foreach($arr as $k => $v) {
    if( ( array_sum($v) / count($v) ) == max($v) ) {
        echo "OK\n";
    } else {
        echo "BAD ".( array_sum($v) / count($v) )." == ".max($v)." \n";
    }
}

这个浮点魔法,@MarkBaker给你文章的链接。
您可以使用这个肮脏的hack(将float重新定义为字符串)来比较它

$arr[0] = array(1.01, 1.01, 1.01);
$arr[1] = array(1.65, 1.65, 1.65);

foreach($arr as $k => $v) {
    if( (string) ( array_sum($v) / count($v) ) == (string) max($v) ) {
        echo "OK\n";
    } else {
        echo "BAD ".( array_sum($v) / count($v) )." == ".max($v)." \n";
    }
}

我想你选了一个神奇的浮点数,它不太适合@MarkBaker是对的