MQLで小数を扱う場合、NormalizeDoubleによる正規化をしないと、正しく判定されない場合があるので注意が必要です。
例えば0.01を10回足す下記のようなコードを書きます。
double val=0.0; for(int i=0; i<10; i++){ val+=0.01; } Print(val);
結果は「0.1」となるはずですが、
以下のような値が出力されます。
>>0.09999999999999999
これは0.1と等しい値として取り扱われるでしょうか?
確かめてみましょう。
if(val==0.1){ Print("the same"); } else{ Print("not the same"); }
結果は、
>>not the same
同じ値ではないと判定されてしまいます。
そこでNormalizeDoubleで正規化してみましょう。
val=NormalizeDouble(var1,5); Print(val); if(val==0.1){ Print("the same"); } else{ Print("not the same"); }
結果は、
>>0.1 >>the same
同じ値として判定されました!
上記の例のように、NormalizeDoubleによる正規化をしないと、正しく判定されない場合があるので注意が必要です。
コメント