MT4 double NormalizeDouble のバグについて

MetaTrader 4
ゴゴジャンEA生活
2022/05/03 12:56
665

![mt4 bag.png](mt4 bag.png)
>質問
tick が動くたびに 0.01 を足して出力しているのですが、途中で0.07ではなく、0.0700000001 といったバグがでてきます。

>行ったこと
調べたところ小数点を指定したらよいとでてきたのですが、、NormalizeDouble や DoubleToStringを使っても同様の0.0000001 バグが出てきます。どうしたら解決できますでしょうか? 優秀なゴゴジャン先生、ぜひ教えてください。

コード
int OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[],const double &open[],const double &high[],const double &low[],
const double &close[],const long &tick_volume[],const long &volume[],const int &spread[])
{
static double count ;
count = count + 0.01 ;
//count = NormalizeDouble( count , 2 );
count = DoubleToString( count , 2 );
Alert( count );
return(rates_total);
}

コメント

GogoJungle
2022/05/05 14:59

小数計算の誤差つきましては、他の言語でも発生しますが
表示に関する部分に関しましては、MT4の仕様でございますのでわかりかねます。

下記のように出力した場合も、同様の表示となりました。

Print(0.07);

0.07000000000000001

表示は、上記のようになりましたが
比較については、下記式で OK と表示されましたので判定は問題ないかと存じます。

if(count == 0.07) Print("OK");

別件で、下記結果も若干異なる状況でございましたが

Print(0.07*1);

0.07000000000000001

*2 の場合は正しく表示されている状況でございました。

Print(0.07*2);

0.14

ご参考いただけますと幸いです。何卒よろしくお願い申し上げます。

関連トピックス

検索結果がありません。

ノーコードで誰でも簡単EA開発!MQL言語学習にも使える! | GogoJungle

注目トピックス

検索結果がありません。