正確な」値を得ることは可能でしょうか? - ページ 2

 

しかし、この値

0.099999999

は、0.1 を返します。

)

 

ということであれば、上記の引用文の方が、TCの課題としてふさわしいのではないでしょうか。

void OnStart()
  {
//---
   int DIGITS=2;
   string stroka=DoubleToString(0.099999999,8);
   int P=StringFind(stroka,".");
   Print(stroka);
   stroka=StringSubstr(stroka,0,P+DIGITS+1);
   Print(StringToDouble(stroka));
   Print(NL(DIGITS,0.099999999));
   
  }
//+------------------------------------------------------------------+
double NL (int DIGITS,double value) {
   double step=1/MathPow(10,DIGITS);
   return (MathFloor(value/step)*step);
}

リターンです。

2014.10.04 11:42:31.856 normalize EURUSD,H4: 0.09
2014.10.04 11:42:31.856 normalize EURUSD,H4: 0.1
2014.10.04 11:42:31.856 normalize EURUSD,H4: 0.10000000
 

DoubleToStrとは 異なり、指定した精度で文字列を正確に切り捨てるという、まさに私がやりたいことを実現する関数をスケッチしてみたのです。

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 : ""));
}

0.09864724」の結果。

Comment (Normalize (0.09864724, 2)); // 0.09

0,-843158 " の結果です。

Comment (Normalize ("0,-843158", 3, ",-")); // 0,-843

ダブルと同様の操作。

Comment ((double) Normalize (0.09, 2) * 5); // 0.45

一通り検索してみましたが、そのような機能はMQL4(5?)にすでに存在します。ないのであれば、もっと前から追加しておけばいいのでは?:)

 
WePlexus:

DoubleToStrとは 異なり、指定した精度で文字列を正確に切り捨てるという、まさに私がやりたいことを実現する関数をスケッチしてみたのです。

0.09864724」の結果。

0,-843158 " の結果です。

ダブルと同様の操作。

一通り検索してみましたが、そのような機能はMQL4(5?)にすでに存在します。ないのであれば、もっと前から追加しておけばいいのでは?:)

それこそ "楽 "ですね(笑)。
 
WePlexus:

DoubleToStrとは 異なり、指定した精度で文字列を正確に切り捨てるという、まさに私がやりたいことを実現する関数をスケッチしてみたのです。

0.09864724」の結果。

0,-843158 " の結果です。

ダブルと同様の操作。

一通り検索してみましたが、そのような機能はMQL4(5?)にすでに存在します。ないのであれば、もっと前から追加しておけばいいのでは?:)

あなたは非正確な例で操作している。だから、あなたの関数が正しく動作すると結論づけることは不可能だ。

を例にとると、このようになります。

0.019999999999の残し方 -- =0.01の残し方
 
abolk:
あなたは文字にならない例で操作している -- だから、あなたの機能が正しく動作すると結論づけることはできないのです。

を例にとると、このようになります。

0.019999999999の残し方 -- =0.01の残し方
は、最後の関数をチェックすると、0.01を残す。
 

あなたが何をしたいのか、まだ理解できていません。

0.098ではなく、0.098をチャートに表示させたいのであれば、そうしてください

int a=0.098 * 100;

double d=a/100.0;

コメント(StringFormat("%G", d );

 
sanyooooook:
最後の関数をチェックし、0.01を残す
関数のチェック -- 0.02を残す
 
abolk:
関数を確認したところ、0.02を残していました。

確かに、0.02。

私の関数はもっと面倒かもしれませんが、正確に0.01を切り取ります。

 
sanyooooook:
最後の関数をチェックし、0.01を残す
abolkの 例から0.01を取るには、どのように関数を最適化すればよいのでしょうか?