MQL4およびMQL5でDigits()をバイパスして任意の数値(引用符だけでなく)の小数点以下桁数を取得 - ページ 8 123456789101112131415...22 新しいコメント Konstantin Gruzdev 2018.11.12 22:23 #71 Igor Makanu:いいえ、うまくいきません...。 そうだった、ロット正規化で使うので、0より小さい数字には承知の上で作っていたのを忘れていた。修正しました、これで大丈夫です。 #define EPSILON 0.000000001 #define MORE(A,B) ((A)-(B)>EPSILON) int Digit(double value) { int digits=0; value=MathMod(value,1.0); while(MORE(1.0/MathPow(10,digits),value)) digits++; return(digits); } //+------------------------------------------------------------------+ int DoubleToDigits(double value) { double absvalue=NormalizeDouble(fabs(value-int(value)),15); int res=StringLen(string(absvalue))-2; return(res<=0?0:res); } //+------------------------------------------------------------------+ void OnStart() { double f = 122334550.007; Print("1. DoubleToDigits() = ",DoubleToDigits(f)); Print("1. Digit() = ",Digit(f)); f = 0.007; Print("2. DoubleToDigits() = ",DoubleToDigits(f)); Print("2. Digit() = ",Digit(f)); } 結果 2018.11.13 05:18:40.599 Digits (EURUSD,M1) 1. DoubleToDigits() = 11 2018.11.13 05:18:40.599 Digits (EURUSD,M1) 1. Digit() = 3 2018.11.13 05:18:40.599 Digits (EURUSD,M1) 2. DoubleToDigits() = 3 2018.11.13 05:18:40.599 Digits (EURUSD,M1) 2. Digit() = 3 Алексей Тарабанов 2018.11.12 22:31 #72 FXで稼いだお金をジョリートレーダーバーで運用します。ロンドンで開こう Igor Makanu 2018.11.12 22:37 #73 Konstantin Gruzdev:そうだった、ロット正規化で使うので、0より小さい数字には承知の上で作っていたのを忘れていた。修正しました、これで大丈夫です。 結果 ダメでした。 double f = 122334550.00999; 結果 2018.11.13 02:36:31.034 tst (EURUSD,M30) 1.デジット() = 3 Алексей Тарабанов 2018.11.12 22:54 #74 主よ、この人たちの子供たちに物理を学ぶ機会をお与えください。 Konstantin Gruzdev 2018.11.12 23:29 #75 Igor Makanu:いや、うまくいかなかった。そうか、何が悪いかわかったから、直そう。 Alexey Viktorov 2018.11.13 07:17 #76 Алексей Тарабанов: 主よ、この人たちの子供たちに物理を学ぶ機会をお与えください。親はなくても困らないのに、なぜ? Mesaoria 2018.11.13 12:22 #77 まず、自分自身に答えてください。なぜ、小数点の後の桁数を知る必要が あるのでしょうか?何のために? 2桁で2倍」の正しい使い方は、解くべき問題の中であらかじめ分かって いる、ある一定の 精度で使うことです。 それ以外はナンセンスです。 double moduloの値が大きくなればなるほど精度が落ち、どんなアルゴリズムでも(特に文字列変換では圏外)台無しになるという話でもない。 Igor Makanu 2018.11.13 13:11 #78 Mesaoria:(特に文字列に変換するとアウト)は失敗します。C++では文字列の扱いが遅く、MQLでは組み込み関数が自作関数より速いことは明らかです。 Mesaoria 2018.11.13 15:05 #79 Igor Makanu:これはMQL用のコードで、標準C++用のコードではありません。C++では文字列の処理が遅くなるのは明らかで、MQLでは組み込み関数は自作関数より速いです。そういう意味じゃないんです。ダブリを文字列に変換して、その中の全文字を計算するという発想は、ただの戯言です。何をするにしても Alexandr Sokolov 2018.11.13 16:20 #80 Mesaoria:そういうことでは全然ないんです。デュブルを文字列に変換して、その文字列の中の文字を数えるという発想は完全にナンセンスです。何をやってもダメ。 そうですね、私のバージョンはおそらくベストではありませんが、それについて何も見つからなかったので、私が自分で考えたベストです、上のコメントで書きましたが、あなたは自分のバージョンを提案しませんでしたね。 123456789101112131415...22 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
いいえ、うまくいきません...。
そうだった、ロット正規化で使うので、0より小さい数字には承知の上で作っていたのを忘れていた。修正しました、これで大丈夫です。
結果
そうだった、ロット正規化で使うので、0より小さい数字には承知の上で作っていたのを忘れていた。修正しました、これで大丈夫です。
結果
ダメでした。
double f = 122334550.00999;
結果
2018.11.13 02:36:31.034 tst (EURUSD,M30) 1.デジット() = 3
いや、うまくいかなかった。
そうか、何が悪いかわかったから、直そう。
主よ、この人たちの子供たちに物理を学ぶ機会をお与えください。
親はなくても困らないのに、なぜ?
まず、自分自身に答えてください。なぜ、小数点の後の桁数を知る必要が あるのでしょうか?何のために?
2桁で2倍」の正しい使い方は、解くべき問題の中であらかじめ分かって いる、ある一定の 精度で使うことです。
それ以外はナンセンスです。
double moduloの値が大きくなればなるほど精度が落ち、どんなアルゴリズムでも(特に文字列変換では圏外)台無しになるという話でもない。
(特に文字列に変換するとアウト)は失敗します。
C++では文字列の扱いが遅く、MQLでは組み込み関数が自作関数より速いことは明らかです。
これはMQL用のコードで、標準C++用のコードではありません。C++では文字列の処理が遅くなるのは明らかで、MQLでは組み込み関数は自作関数より速いです。
そういう意味じゃないんです。ダブリを文字列に変換して、その中の全文字を計算するという発想は、ただの戯言です。何をするにしても
そういうことでは全然ないんです。デュブルを文字列に変換して、その文字列の中の文字を数えるという発想は完全にナンセンスです。何をやってもダメ。