PHP 使用 Ceil 对浮点值进行四舍五入,结果比较并不像它必须的那样

PHP Rounding Float Values With Ceil And Result Comparison Is Not As It Must Be

我有一个PHP函数作为

function func(){

    function round_up($value, $decPlaces) {
        return ceil($value * pow(10, $decPlaces)) / pow(10, $decPlaces);
    }

    $a=21.31;
    $b=2;
    $c=10.64;
    $d=0.03;

    $xxx=$a;
    $yyy=round_up($b*$c,2)+round_up($d,2);
    $zzz=($xxx===$yyy);

    var_dump($xxx,$yyy,$zzz);
}

这个函数输出

float(21.31) float(21.31) bool(false)

好像xxx等于yyy但是为什么zzz是假的?这个函数和结果的问题在哪里?

只需将最后一行更改为此即可查看区别:

var_dump(number_format($xxx, 20), number_format($yyy, 20), $zzz);

以下是有关该问题的一些有用信息:

https://secure.php.net/manual/en/language.types.float.php
https://andy-carter.com/blog/don-t-trust-php-floating-point-numbers-when-equating

还有更多...:)