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による正規化をしないと、正しく判定されない場合があるので注意が必要です。

 
 

コメント