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

 
void OnStart()
{
        double price =  500000000.0001;
        Print( price, ":", d( price ));
}

結果:500000000.0001:4

4、ただし8は不可

 
よし、それじゃ...この喜びを、好きな人は浴びてください。
 
A100:

ご想像の とおりです。また、小数点以下は何桁ですか? 8?

テストは必要ない

  Print(NormalizeDouble(1234567890 + 1 e-7, 8) == 1234567890); // true
  Print(1234567890 + 1 e-7 == 1234567890); // true
 
fxsaber:

チェックされる筋合いはない

とはいえ、コードを 修正したわけですから、チェックは役に立ちました。

 
プリント( 12345+1e-7 )
 
A100:

それでも、あなたはコードを 修正しました

コードがどこから引き出されたかを見てください。そして、それがどのような実用的な目的であったのか。明確でない場合 - 価格のため。

そのようなユーザーが使うことを想定していないため、コードにフールプルーフがなかった。

議論の過程で、コードを公開する場合はフールプルーフを実施する必要があることが判明した。そうしないと、5ページもクソが続くことになる。

だから、確かに、修正された。もう一度言いますが、Digitが無限にある数字が普通です。

 
Dmitry Fedoseev:

NormalizeDoubleの 仕組みは、その完全なアナログをプレイしたことがあるので知っています。

どのようなDigitsを手に入れたいかによって、大きく変わってきます。二重表現の場合、あなたのコードは別の値を与えます。数値定数の桁数であれば、正しい(必ずしもそうではない)。

 
またドロッパーの出番か...。
 
fxsaber:

それは、あなたが何を必要としているかによって大きく異なります。

必要なもの

int f( double );

様に

void OnStart()
{
        Print( f( NormalizeDouble( 500000000.0001, 4 )));
}

の結果が等しくなる。4

 
A100:

必要なもの

まで

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

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