MQL4およびMQL5でDigits()をバイパスして任意の数値(引用符だけでなく)の小数点以下桁数を取得 - ページ 5

 
A100:

必要なもの

ように

という結果になりました。4

ちょうど4つ?やってみよう。

 
fxsaber:

もしかしたら、それこそがあなたに必要な機能かもしれません。TCに回答しました

なぜなら、(あなたが正しく指摘したように)すべての数が正確に2倍で表現できるわけではないので、精度を指定せずに問題を解くことは無意味だからです(一般的なケースでは、それは無茶な結果を導くからです)。

 
A100:

なぜなら、(あなたが正しく指摘したように)すべての数字が正確に2倍で表現できるわけではないので、精度を指定せずに問題を解くことは無意味だからです(一般に無茶な結果を招くからです)。

小数点以下の 桁数を変えずに精度を指定する方法や、バージョンで説明したデメリットを解消 するにはどうしたらよいのでしょうか。私自身は、(文字列)値しか見つけられませんでした。

 
Alexandr Sokolov:

小数点以下の 桁数を変えずに精度を指定する方法や、バージョンで説明したデメリットを解消 するにはどうしたらよいのでしょうか。私自身は、(文字列)値しか見つけられませんでした。

最後の非ゼロをどの範囲まで探すかということですね。

 

私は連続除数0.1でMathMod()を介して小数点以下の桁数の計算を行うことを試みた後、0.01 ... 0.000(15 ゼロ)1、それは動作しませんでした、数の精度は、毎回正規化する必要が "フローティング "を保持し、あなたが正規化を使用する場合、それはあなたが望む数を比較する方が簡単で、何の記号に正規化 - 異なる場合は、最後の記号を発見した。

HH:別のオプションがありますが、チェックする時間がありませんでした - 10 ^ 16の整数部なしで実数を乗算し、ロングですべてを保存し、その後10で割って、除算の余りを チェックし、= 0なら、再び分割する

 
Igor Makanu:

ZS: もう一つ方法があるのですが、時間がなくて調べていません。整数部のない実数に10^16を掛けて全部lonに保存し、10で割って余りを 調べ、=0ならもう一度割ります。

うまくいかない。

 
doublePoint()を使用する
10進対数、符号廃棄...
 
Aliaksandr Hryshyn:
doublePoint()を使用する
10進の対数、符号は破棄...

もテストしましたが、まさかの

それだけです。

void OnStart()
{
 double p = 0.07;
 Print(p);
}/*******************************************************************/

という結果になります。

2018.11.05 10:43:05.138 !00 (GBPJPY,H1) 0.07000000000000001
対数を3回当てると...。
 
Alexey Viktorov:
もテストしましたが、うまくいきません。
なぜダメなのか?さらに丸めて全体に。
 
Point()関数が 返すものを見てみましょう。