Php 条件don'中的变量值;t在foreach循环中打印

Php 条件don'中的变量值;t在foreach循环中打印,php,for-loop,Php,For Loop,我想不出我在哪里犯了这个错误。简单地说,我想在for循环中打印$I变量的值。 但是它没有打印任何东西。为确保打印了$fms,$tecsol和etc变量,并且这些变量具有相应的值。请参见下文 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 ec

我想不出我在哪里犯了这个错误。简单地说,我想在for循环中打印$I变量的值。 但是它没有打印任何东西。为确保打印了
$fms
$tecsol
和etc变量,并且这些变量具有相应的值。请参见下文

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>';
        }

    }

}
函数sortCatergory(){
//将返回值赋给变量时,返回值是=<5的平均值
echo$econ=func_Economics();
回音“
”; echo$fms=func_fms();echo'
'; echo$tecsol=func_Technology_Solutions();echo'
'; echo$math=func_Mathematics();echo'
'; echo$stat=func_Statistics();echo'
'; echo$quant=func_quant_Equity();echo'
'; echo$gensoft=func_General_Software_Programming();echo'
'; echo$dataprod=func_Data_Products();echo'
'; 对于($i=5;$i>0.1;$i=$i-.1){ //回显$i.
'; 如果($econ==$i){ 回显$i.
'; } 如果($fms==$i){ 回显$i.
'; } 如果($tecsol==$i){ 回显$i.
'; } 如果($math==$i){ 回显$i.
'; } 如果($stat==$i){ 回显$i.
'; } 如果($quant==$i){ 回显$i.
'; } 如果($gensoft==$i){ 回显$i.
'; } 如果($dataprod==$i){ 回显$i.
'; } } }
这里是echo$i.
“不打印任何内容。但我希望在它们相等时再次打印相同的结果。
我哪里做错了?

您使用的是浮点数,因此无法信任比较。你们可以用这个方法来比较它们

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


您使用的是浮点数,因此无法信任比较。你们可以用这个方法来比较它们

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


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


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

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


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

我猜数字是你的敌人

尝试以下方法:在开始时铸造数字

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

 $i = (int) $i*100;
 $econ = (int) $econ*100;
其他Var也一样。
现在你有了可以安全比较的整数。

我猜这里的数字是你的敌人

尝试以下方法:在开始时铸造数字

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

 $i = (int) $i*100;
 $econ = (int) $econ*100;
其他Var也一样。
现在您有了可以安全比较的整数。

您应该阅读有关浮点比较的内容

发件人:

比较浮动

如上警告所述,由于浮点值在内部的表示方式,测试浮点值是否相等是有问题的。但是,有一些方法可以绕过这些限制对浮点值进行比较

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

$epsilon=0.00001;//这是精确性
if(绝对值($econ-$i)<$epsilon){
回显$i.
'; }

上面的代码将正常工作

您应该阅读有关浮动比较的内容

发件人:

比较浮动

如上警告所述,由于浮点值在内部的表示方式,测试浮点值是否相等是有问题的。但是,有一些方法可以绕过这些限制对浮点值进行比较

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

$epsilon=0.00001;//这是精确性
if(绝对值($econ-$i)<$epsilon){
回显$i.
'; }

上述代码正常

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

建议如下:

1) 确保函数的返回值精确地四舍五入到小数点后1位


2) 每次尝试打印变量的值,方法是删除要调试的if条件。

这里的问题似乎是函数输出的值(存储在变量中)没有返回正确的值

建议如下:

1) 确保函数的返回值精确地四舍五入到小数点后1位


2) 每次尝试打印变量的值,方法是删除要调试的if条件

我尝试了您的代码,这对我很有效 请试试这个 如果($econ==(字符串)$i) { 回音$i';
}

我尝试了你的代码,这对我很有用 请试试这个 如果($econ==(字符串)$i) { 回音$i';
}

根据您的值(
$stat
$quant
)等的计算方式,您可能会遇到浮点精度问题。我建议首先使用
|
)运算符将多个
if
语句转换为单个
if
语句以增加可读性。是的,我会这样做,但实际上这里的问题是什么?根据您的值(
$stat
$quant
)等的计算方式,您可能会遇到浮点精度问题。我建议首先使用
|
)将多个
if
语句转换为单个
if
语句运算符以提高可读性。是的,我会这样做,但实际上这里有什么问题?这些数字是在循环之前打印的,我认为这不是精度问题。请尝试一下。数字四舍五入
 $i = (int) $i*100;
 $econ = (int) $econ*100;
 $epsilon = 0.00001; // this is precision

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