2011-09-09 4 views
0

私は2つの数値を比較する必要があります。それらが等しい場合でもif-statementがfalseを返す場合もあります。2つの数字「エコー」は同じですが!=は真ですか?

$next_accum = $curr_amount + $csv_arr[$i]['amount']; 
var_dump($next_accum); 
echo ' '; 
var_dump($csv_arr[$i]['accum_amount']); 
if($next_accum != $csv_arr[$i]['accum_amount']) echo ' _err'; 
echo '<br>'; 

私はそれを得ることはありません。..上記プリント:

int(892474) int(892474) 
int(866374) int(866374) 
int(741374) int(741374) 
int(685124) int(685124) 
int(570749) int(570749) 
int(520749) int(520749) 
int(510819) int(510818) _err 
int(474062) int(474063) _err 
int(461678) int(461678) 
+1

あなたは、整数にキャストし、それらを丸める(INTVAL使用)、またはそれらをCONCATすることができます文字列になる。浮動小数点は、メモリを表現する方法のために正確さに問題が発生する可能性があります。 – galchen

+2

浮動小数点数学の不正確な世界へようこそ! – cdhowie

+1

intに変換できない場合は、次のような精度をチェックすることができます:if(abs($ float1 - $ float2)> 0.001)echo 'error; –

答えて

0

試してみてください。

if(((int)$next_accum) != ((int)$csv_arr[$i]['accum_amount'])) echo ' error'; 
+1

'int()'ではなく '(int)'を意味すると思います。余分な括弧は不要です。 if((int)$ next_accum!=(int)$ csv_arr [$ i] ['accum_amount']) '... – DaveRandom

+0

oops。一定。 tx。 intval()を提案しようとしていましたが、(int)はこの場合にはうまくいくはずです。敬具は分かりやすく、はい、オプションです。 – ldg

+0

varsがintに変換されていれば動作しません。いくつかの値は奇妙な方法で丸められます。値を文字列に変換する必要があります – clarkk

関連する問題