トップ  >  Q&A よくある質問&備忘録  >  MetaEditorコンパイルエラー一覧  >  possible loss of data to type conversion
possible loss of data to type conversion

データ型が一致しないデータ同士で計算を行っている為、暗黙的にキャストされデータ損失が発生している可能性があります。

サンプルソース(正しい例)

    datetime Jisa = ( TimeLocal() - TimeCurrent() ); 

TimeLocal()とTimeCurrent()はdatetime型の値を返すので、その計算結果はdatetime型の 変数に代入する必要があります。

データ型について理解しておらず、 適当にintを使う人が多いのですが、 データ型の種類だけは適切なものを正しく選んで使って下さい。
整数なら基本的にintで構わないのですが、
小数点が含まれる実数はdoubleを使って下さい。
日付時間はdatetimeを使って下さい。

intdoubleは、 水と油のように混ざり合うことが出来ない別物ですので、注意して下さい。
このコンパイルワーニングを無視して「結果が0になる」と言ったような問い合わせが多いです。
人間からしてみれば1(整数)と1.1(実数)は同じ数字にしか見えませんが、コンピュータでは全く別物として処理されています。




詳細な解説ページを作成しました。
ヒント:H2-1.データ型について①
よく理解出来なかった人はこの解説ページを良く読んで下さい。
読みもしないで「分からないんでどう修正すれば良いか教えて下さい」という人は・・・大丈夫ですか?実は会社のリストラ候補にリストアップされていませんか?

サンプルソース(エラーの例)

    // datetimeの計算結果をint型変数に代入しようとしている為、int型で暗黙キャストされます。
    int Jisa = ( TimeLocal() - TimeCurrent() ); 

    long  temp_long = 0;
    int   temp_int  = temp_long; // long型の変数をint型変数に代入しようとしている為、int型で暗黙キャストされます。
    double temp_double = 0;
    temp_int = temp_double;      // double型の変数をint型変数に代入しようとしている為、int型で暗黙キャストされます。


暗黙キャストでデータ損失が発生する可能性がある場合に出る警告なので、long型(8byte)の変数にint型(4byte)の値を代入しても警告は出ません。
基本的に大きなデータ型から小さいデータ型への代入か、異なる型への代入時に発生します。



スポンサーリンク
検索

↑の検索エンジンが表示されない人は、
↓の古い検索エンジンを使用して下さい。
カスタム検索
MQL4リファレンスツリー
スポンサーリンク
スポンサーリンク


Copyright ©2015 MT4でEA自作しちゃお~ All Rights Reserved.


Top

inserted by FC2 system