PHP圆形疯狂bug

PHP圆形疯狂bug,php,floating-point,Php,Floating Point,为什么结果是0.3300000000001?为什么它只发生在100和99之间?如果我使用$last_center=90-$last_center; 结果是-9.67当需要100%精度时,浮点计算不可靠。PHP文档对此有官方警告,如果需要高精度的计算,则应使用任意精度的数学函数或gmp函数。当需要100%精度时,浮点计算不可靠。PHP文档对此有官方警告,如果您需要高精度的计算,您应该使用任意精度的数学函数或gmp函数。简单的回答是浮点值不是完美的。有时,根据您的系统设置,会出现错误 较长的答案是,

为什么结果是0.3300000000001?为什么它只发生在100和99之间?如果我使用$last_center=90-$last_center;
结果是-9.67

当需要100%精度时,浮点计算不可靠。PHP文档对此有官方警告,如果需要高精度的计算,则应使用任意精度的数学函数或gmp函数。

当需要100%精度时,浮点计算不可靠。PHP文档对此有官方警告,如果您需要高精度的计算,您应该使用任意精度的数学函数或gmp函数。

简单的回答是浮点值不是完美的。有时,根据您的系统设置,会出现错误

较长的答案是,浮点值不是数值的精确表示,它们是近似值,在大多数情况下,已经足够好了。问题是,有时您想要的值会落在float无法完美工作的区域,并且会出现如下舍入错误


这就是为什么依赖精确值的系统,如金融应用程序,不使用浮动。它们使用特殊用途的高精度类型,或者用两个单独的整数值表示美元和美分。

简而言之,浮点值不是完美的。有时,根据您的系统设置,会出现错误

较长的答案是,浮点值不是数值的精确表示,它们是近似值,在大多数情况下,已经足够好了。问题是,有时您想要的值会落在float无法完美工作的区域,并且会出现如下舍入错误


这就是为什么依赖精确值的系统,如金融应用程序,不使用浮动。它们使用特殊用途的高精度类型,或者用两个单独的整数值表示美元和美分。

为什么浮点数不精确:

他们把小数看作是二元分数的化合物。1/2+1/4+1/8+1/16+


并不是所有的数字都可以完美地用这个来表示,所以它只是给了你“最好的尝试”。

为什么浮点数不精确:

他们把小数看作是二元分数的化合物。1/2+1/4+1/8+1/16+


并不是所有的数字都可以完美地用它来表示,所以它只是给了您“最好的尝试”。

“当您使用浮点数时,PHP是不可靠的。”。。。PHP不是不可靠的,浮点数学是不精确的。对不起,没错,这不是PHP,而是浮点problem@ElenaSharovar-那么怎么说呢?“当你使用浮点数时,PHP是不可靠的。”。。。PHP不是不可靠的,浮点数学是不精确的。对不起,没错,这不是PHP,而是浮点problem@ElenaSharovar-那你打算怎么说?
<?php
    $last_percent = 0;
    $as = array("110.800002098083",  "30", "36.1499996185303", "11", "13", "13.9899997711182", "74.5200042724609", "13.9899997711182");
    $t = 304.46000552177;
    foreach($as as $a) {
        $last_percent += round($a*100/$t, 2);
    }
    var_dump( $last_percent);
    $last_percent = 100 - $last_percent;
    var_dump( $last_percent);
?>