1

どこでミスをしたのかわかりません。簡単に言うと、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>';
        }

    }

}

ここではecho $i.'<br>'何も印刷しません。しかし、それらが等しい場合、同じ結果を再度出力することを期待しています。どこで私は間違ったことをしましたか?

4

6 に答える 6

1

私はあなたのコードを試しましたが、これは私にとってはうまくいきました。}

于 2013-06-13T14:03:12.343 に答える
0

浮動比較について読む必要があります。

PHPマニュアルから:

フロートの比較

上記の警告で述べたように、浮動小数点値が等しいかどうかをテストすることは、それらが内部的に表現される方法のために問題があります。ただし、これらの制限を回避して浮動小数点値を比較する方法があります。

浮動小数点値が等しいかどうかをテストするには、丸めによる相対誤差の上限が使用されます。この値は、マシン イプシロンまたは単位の丸めとして知られており、計算で許容される最小の差です。

 $epsilon = 0.00001; // this is precision

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

上記のコードは正常に動作します

于 2013-06-13T13:39:11.430 に答える
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

よくわかりませんが、浮動小数点の不正確さに関係している可能性があります

「bccomp」を使用してみて、得られた結果をお知らせください。

于 2013-06-13T13:35:57.720 に答える
0

私の推測では、ここでは数値が敵です。

次のことを試してください: 最初に数字をキャストします。

あなたは2つの小数値を持っているので、私はお勧めします:

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

他の変数についても同じです。これで、安全に比較できる整数が得られました。

于 2013-06-13T13:36:51.387 に答える