1

我无法弄清楚我在哪里做错了。简单地说,我想在 for 循环中打印 $i 变量的值。但它不打印任何东西。为确保 $fms,$tecsol等变量被打印并且它们具有值。请参见下文。

0.6
1.8
2.7
2.5
2.5
2
0.5
3

这是for循环的代码。

function sortCatergory(){

//assigning return values to variable , return value is an average which is =< 5 
echo $econ=func_Economics();
    echo '</br>';
echo $fms=func_FMS();echo '</br>';
echo $tecsol=func_Technology_Solutions();echo '</br>';
echo $math=func_Mathematics();echo '</br>';
echo $stat=func_Statistics();echo '</br>';
echo $quant=func_Quant_Equity();echo '</br>';
echo $gensoft=func_General_Software_Programming();echo '</br>';
echo $dataprod=func_Data_Products();echo '</br>';

    for($i=5; $i>0.1; $i=$i-.1){
    //echo $i.'</br>';

        if($econ==$i){
            echo $i.'</br>';
        }
        if($fms==$i){
            echo $i.'</br>';
        }
        if($tecsol==$i){
            echo $i.'</br>';
        }
        if($math==$i){
            echo $i.'</br>';
        }
        if($stat==$i){
            echo $i.'</br>';
        }
        if($quant==$i){
            echo $i.'</br>';
        }
        if($gensoft==$i){
            echo $i.'</br>';
        }
        if($dataprod==$i){
            echo $i.'</br>';
        }

    }

}

这里echo $i.'<br>'什么都不打印。但是我希望在它们相等时再次打印相同的结果。我哪里做错了?

4

6 回答 6

1

我试过你的代码,这对我有用 请试试这个 if($econ==(string)$i) { echo $i.''; }

于 2013-06-13T14:03:12.343 回答
0

您正在使用浮动数字,因此您不能相信==比较。您可以使用方法比较它们

if (round($a - $b, 2) == 0) {

或者

if (abs($a - $b) < 0.001) {

或者

if (round($a, 2) == round($b, 2)) {

或者

if ((int) ($a * 100) == (int) ($b * 100)) {
于 2013-06-13T13:34:28.253 回答
0

您的问题看起来像函数输出的值(存储在变量中)没有返回正确的值。

建议是:

1) 确保将函数的返回值精确到小数点后 1 位。

2)通过删除if条件来尝试每次打印变量的值进行调试。

于 2013-06-13T13:51:17.773 回答
0

您应该阅读有关浮动比较的信息。

来自php 手册

比较浮点数

如上面的警告所述,测试浮点值是否相等是有问题的,因为它们在内部表示的方式。但是,有一些方法可以绕过这些限制来比较浮点值。

为了测试浮点值是否相等,使用了由于舍入导致的相对误差的上限。该值称为机器 epsilon 或单位舍入,是计算中可接受的最小差异。

 $epsilon = 0.00001; // this is precision

 if(abs($econ-$i) < $epsilon){
        echo $i.'</br>';
 }

上面的代码可以正常工作

于 2013-06-13T13:39:11.430 回答
0

我不确定,但这可能与浮点不精确有关

尝试使用“bccomp”,让我们知道您得到了什么结果。

于 2013-06-13T13:35:57.720 回答
0

我的猜测是数字是你的敌人。

尝试以下操作:在开始时投下你的号码。

由于您有两个十进制值,我建议:

 $i = (int) $i*100;
 $econ = (int) $econ*100;

其他变量相同。现在您有了可以安全比较的整数。

于 2013-06-13T13:36:51.387 回答