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

 

그리고 여기에 의미가 있습니다

0.099999999

0.1을 반환합니다

)

 

그러면 위에 주어진 것이 TS의 작업에 더 정확할 것입니다.

 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.0199999999999999999에서와 같이 -- 떠나기 = 0.01
 
abolk :
일반적이지 않은 예제를 사용하고 있으므로 함수가 올바르게 작동하고 있다는 결론을 내릴 수 없습니다.

이 예를 들면:

번호 = 0.0199999999999999999에서와 같이 -- 떠나기 = 0.01
마지막 기능을 확인하고 0.01을 남깁니다.
 

나는 아직도 당신이 원하는 것을 이해하지 못합니다.

차트에서 0.098 대신 0.09를 보고 싶다면 그렇게 하세요!

정수 a = 0.098 * 100;

이중 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을 사용하도록 함수를 최적화하려면 어떻게 해야 합니까?