正確な」値を得ることは可能でしょうか? - ページ 3 1234567 新しいコメント Alexandr Bryzgalov 2014.10.04 08:11 #21 abolk: 関数を確認したところ、0.02を残していました。私の切り口は正しいのでしょうか?void OnStart() { //--- int DIGITS=2; string stroka=DoubleToString(0.0199999999999,8); int P=StringFind(stroka,"."); Print(stroka); stroka=StringSubstr(stroka,0,P+DIGITS+1); Print(StringToDouble(stroka)); Print(NL(DIGITS,0.0199999999999)); Print(Normalize (0.0199999999999, 2)); } //+------------------------------------------------------------------+ double NL (int DIGITS,double value) { double step=1/MathPow(10,DIGITS); return (MathFloor(value/step)*step); } string Normalize (string Normalize_Parse, int Normalize_Number, string Normalize_Separator = ".") { string Normalize_Before, Normalize_After; for (int i = 0; i <= StringLen (Normalize_Parse) - 1; i ++) { if (StringSubstr (Normalize_Parse, i, StringLen (Normalize_Separator)) == Normalize_Separator) { for (int ii = i + StringLen (Normalize_Separator); ii < i + StringLen (Normalize_Separator) + Normalize_Number; ii ++) { Normalize_After += StringSubstr (Normalize_Parse, ii, 1); } break; } Normalize_Before += StringSubstr (Normalize_Parse, i, 1); } return (Normalize_Before + (Normalize_After > 0 ? Normalize_Separator + Normalize_After : "")); }2014.10.04 11:56:06.199 normalize EURUSD,H4: 0.01 2014.10.04 11:56:06.199 normalize EURUSD,H4: 0.01 2014.10.04 11:56:06.199 normalize EURUSD,H4: 0.02 2014.10.04 11:56:06.199 normalize EURUSD,H4: 0.02000000 Alexandr Bryzgalov 2014.10.04 08:12 #22 WePlexus:abolkの 例から0.01を取るには、どのように関数を最適化すればよいのでしょうか?どの機能のことを指しているのでしょうか?文字列またはNLを最初に通過する? Andrey F. Zelinsky 2014.10.04 08:13 #23 sanyooooook:そして、それを正しくカットしている私の状態はどうなっているのでしょうか?私の条件を飲んで、切らないでください。廃止する。 0.019999999999の取り方 -- 0.01の残し方 Alexandr Bryzgalov 2014.10.04 08:17 #24 abolk:私の条件を飲んで、切らないでください。8桁しかないので、コンパイラは0.019999999999を0.02に正規化 するようです。ということで、入力は0.02となります。 Alexandr Bryzgalov 2014.10.04 08:18 #25 int DIGITS=2; Print(0.01999999999999999999); string stroka=DoubleToString(0.01999999999999999999,8); int P=StringFind(stroka,"."); Print(stroka); stroka=StringSubstr(stroka,0,P+DIGITS+1); Print(StringToDouble(stroka)); Print(NL(DIGITS,0.01999999999999999999)); Print(Normalize (0.01999999999999999999, 2)); 与える2014.10.04 12:17:13.637 normalize EURUSD,H4: 0.02 2014.10.04 12:17:13.637 normalize EURUSD,H4: 0.02 2014.10.04 12:17:13.637 normalize EURUSD,H4: 0.02 2014.10.04 12:17:13.637 normalize EURUSD,H4: 0.02000000 2014.10.04 12:17:13.637 normalize EURUSD,H4: 0.02 Alexandr Bryzgalov 2014.10.04 08:20 #26 )))さん、ごめんなさい。 ドゥーブルは有効数字が15桁で、それ以上の数字が入ることになります。 Andrey F. Zelinsky 2014.10.04 08:29 #27 sanyooooook:)))さん、ごめんなさい。 ドゥーブルは有効数字が15桁で、それ以上の数字が入ります。 さて、ようやく -- この問題についての建設的な議論が行われるようになりました。 Andrey F. Zelinsky 2014.10.04 08:32 #28 sanyooooook:)))さん、ごめんなさい。 dbleは有効数字が15桁で、これからもっと増えるんですね。これが私の解決策です。double d=0.01999999999999999; double e=(int)(d*100)/100.0; Print("e=",e); を与える=0.01を追加し、9を追加するとdouble d=0.019999999999999999; double e=(int)(d*100)/100.0; Print("e=",e); は、=0.02です。 Petros Shatakhtsyan 2014.10.04 08:33 #29 abolk: さて、ようやく -- この問題についての建設的な議論が行われるようになりました。 なぜ、これが必要なのか。データオーバーフロー。 TheXpert 2014.10.04 08:37 #30 abolk:これが私の解決策です。d*100この操作により、数値が歪むことがあります 1234567 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
関数を確認したところ、0.02を残していました。
私の切り口は正しいのでしょうか?
abolkの 例から0.01を取るには、どのように関数を最適化すればよいのでしょうか?
どの機能のことを指しているのでしょうか?
文字列またはNLを最初に通過する?
そして、それを正しくカットしている私の状態はどうなっているのでしょうか?
私の条件を飲んで、切らないでください。
0.019999999999の取り方 -- 0.01の残し方
私の条件を飲んで、切らないでください。
8桁しかないので、コンパイラは0.019999999999を0.02に正規化 するようです。
ということで、入力は0.02となります。
与える
)))さん、ごめんなさい。
ドゥーブルは有効数字が15桁で、それ以上の数字が入ることになります。
)))さん、ごめんなさい。
ドゥーブルは有効数字が15桁で、それ以上の数字が入ります。
)))さん、ごめんなさい。
dbleは有効数字が15桁で、これからもっと増えるんですね。
これが私の解決策です。
を与える=0.01
を追加し、9を追加すると
は、=0.02です。さて、ようやく -- この問題についての建設的な議論が行われるようになりました。
これが私の解決策です。
d*100
この操作により、数値が歪むことがあります