条件中的变量值不会在foreach循环中打印

时间:2013-06-13 13:27:58

标签: php for-loop

我无法弄明白我犯了哪些错误。简单地说,我想在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>'没有打印任何内容。但我希望在相同时再次打印相同的结果。 我做错了什么?

6 个答案:

答案 0 :(得分:1)

我尝试了你的代码,这对我有用 请尝试这个($ econ ==(string)$ in){echo $ i。''; }

答案 1 :(得分: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)) {

答案 2 :(得分:0)

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

尝试使用'bccomp',让我们知道你得到了什么结果。

答案 3 :(得分:0)

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

请尝试以下操作:在开始时输入您的数字。

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

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

其他变量也一样。 现在你有了可以安全比较的整数。

答案 4 :(得分:0)

你应该读一下浮动比较。

来自php manual

  

比较花车

     

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

     

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

 $epsilon = 0.00001; // this is precision

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

上面的代码可以正常工作

答案 5 :(得分:0)

这里的问题看起来像函数输出的值(存储在变量中)不会返回正确的值。

建议是:

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

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