"정확한"값을 얻을 수 있습니까? - 페이지 3

 
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
 
WePlexus :
abolk 예제에서 0.01을 사용하도록 함수를 최적화하려면 어떻게 해야 합니까?

무슨 기능을 말하는거야?

라인 또는 NL을 통해 첫 번째?

 
sanyooooook :

그리고 무엇이 나를 잘랐습니까?

당신은 내 조건을 받아들이고 그것을 자르지 마십시오:

폐지 :
번호 = 0.0199999999999999999에서와 같이 -- 떠나기 = 0.01
 
abolk :

당신은 내 조건을 받아들이고 그것을 자르지 마십시오:

그래서 doble은 8자입니다. 여기서 컴파일러 는 숫자 0.01999999999999999999를 0.02로 정규화합니다.

저것들. 0.02는 입력으로 간다

 
   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
 

))), 미안 바보

doble에는 15개의 유효 숫자가 있고 더 많은 입력이 있습니다.

 
sanyooooook :

))), 미안 바보

doble에는 15개의 유효 숫자가 있고 더 많은 입력이 있습니다.

음, 마침내 - 문제에 대한 건설적인 토론이 끝났습니다.
 
sanyooooook :

))), 미안 바보

doble에는 15개의 유효 숫자가 있고 더 많은 입력이 있습니다.

내 솔루션은 다음과 같습니다.

 double d= 0.01999999999999999 ;
double e=( int )(d* 100 )/ 100.0 ;
Print ( "e=" ,e);

제공 = 0.01

9-ku를 추가하면:

 double d= 0.01999999999999999 9 ;
double e=( int )(d* 100 )/ 100.0 ;
Print ( "e=" ,e);
그러면 =0.02가 됩니다.
 
abolk :
음, 마침내 - 문제에 대한 건설적인 토론이 끝났습니다.
그리고 왜 필요합니까? 데이터 오버플로.
 
abolk :

내 솔루션은 다음과 같습니다.

d* 100

이 작업은 숫자 값을 왜곡할 수 있습니다.