プロが教えるわが家の防犯対策術!

MT4でEA作成を勉強中です。

if文の条件で詰まっているので助けてください。


変数の宣言で

double hensu_A1 ←値は何でもいいです
double hensu_B1 ←値は何でもいいです
double hensu_A2 ←値は何でもいいです
double hensu_B2 ←値は何でもいいです
double hensu_C  ←0.00

としていたとします。


if文の中で、

if ( hensu_A1 < hensu_B1 && hensu_A2 < hensu_B2)

とした時はちゃんと機能しました。
また、

if ( hensu_A1 + 0 < hensu_B1 && hensu_A2 + 0 < hensu_B2)

としても機能しました。
しかし、上の式の「0」を「hensu_C」に置き換えて

if ( hensu_A1 + hensu_C < hensu_B1 && hensu_A2 + hensu_C < hensu_B2)

とすると、機能しない(計算結果が正しくてもtrueを返さない)ようで困っています。
「hensu_C」の中身は0.00を入れてあるので、計算結果は同じになるはずです。


条件文の書き方が間違っているのでしょうか。
判る方おられましたら教えて頂けると助かります。

A 回答 (2件)

うーん、MT4がわからないが、他言語でありがちな


「初期化してないから初期値0を期待してたら、実は値がNullだったので演算結果もNull」じゃないですか?
hensu_Cは、本当に0.00ですか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
初期化はしているのですが、本当に0かどうかを確かめるために
毎回「hensu_C」の表示をさせてみたところ「0.01」と表示されました。

しばらく調べてやっとわかったのですが、MT4のインプット(動かす時に値を変更するところ)に
以前0.01を入れていると、プログラムの中で毎回0.00を代入していてもそちらが優先されるようでした。
まだこの仕様がよくは判っていませんが、「0が入っていなかった」が真相でした。
ありがとうございました。

お礼日時:2014/10/02 00:37

MT4を使ったことないけど



> if ( hensu_A1 + hensu_C < hensu_B1 && hensu_A2 + hensu_C < hensu_B2)
if ( ((hensu_A1 + hensu_C) < hensu_B1) && ((hensu_A2 + hensu_C) < hensu_B2))
だとどうなりますか?

この回答への補足

回答ありがとうございます。
ご提案頂いたように()でくくってみましたがだめでした。
というか、最初はもっと条件が複雑だったので、細かくカッコでも囲っていたのです。

しかし正常に動いていないようなので、条件をどんどんと簡略化してチェックしていき、
最終的に質問で書いた部分がダメだということが判ったのです…

補足日時:2014/10/01 23:29
    • good
    • 0
この回答へのお礼

解決しました、ありがとうございました。

お礼日時:2014/10/02 00:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!