MQL4 및 MQL5에서 Digits()를 무시하고 숫자(따옴표 제외)의 쉼표 뒤 소수 자릿수 가져오기 - 페이지 8

 
Igor Makanu :

아니, 실행되지 않습니다 ...

아, 예, 0보다 작은 숫자에 대해 의도적으로 만든 것을 잊었습니다. 왜냐하면 로트를 정규화할 때 사용되었습니다. 수정되었습니다. 이제 모든 것이 정상입니다.

 #define EPSILON   0.000000001
#define MORE(A,B) ((A)-(B)>EPSILON)

int Digit( double value)
  {
   int digits= 0 ;
   value= MathMod (value, 1.0 );
   while (MORE( 1.0 / MathPow ( 10 ,digits),value)) 
      digits++;
   return (digits);
  }
//+------------------------------------------------------------------+
int DoubleToDigits( double value)
 {
   double absvalue= NormalizeDouble ( fabs (value- int (value)), 15 );
   int res= StringLen ( string (absvalue))- 2 ;
   return (res<= 0 ? 0 :res);
 }
//+------------------------------------------------------------------+
void OnStart ()
  {
   double f = 122334550.007 ;
   Print ( "1. DoubleToDigits() = " ,DoubleToDigits(f));
   Print ( "1. Digit() = " ,Digit(f));
   f = 0.007 ;
   Print ( "2. DoubleToDigits() = " ,DoubleToDigits(f));
   Print ( "2. Digit() = " ,Digit(f));
  }  

결과:

 2018.11 . 13 05 : 18 : 40.599 Digits (EURUSD,M1)       1 . DoubleToDigits() = 11
2018.11 . 13 05 : 18 : 40.599 Digits (EURUSD,M1)       1 . Digit() = 3
2018.11 . 13 05 : 18 : 40.599 Digits (EURUSD,M1)       2 . DoubleToDigits() = 3
2018.11 . 13 05 : 18 : 40.599 Digits (EURUSD,M1)       2 . Digit() = 3
 
나는 Forex에서 번 돈을 "Merry Trader" 바에 투자할 것입니다. 런던에서 열겠습니다.
 
Konstantin Gruzdev :

아, 예, 0보다 작은 숫자에 대해 의도적으로 만든 것을 잊었습니다. 왜냐하면 로트를 정규화할 때 사용되었습니다. 수정되었습니다. 이제 모든 것이 정상입니다.

결과:

아니, 작동하지 않았다

이중 f = 122334550.00999;

결과:

2018.11.13 02:36:31.034 tst (EURUSD,M30) 1. 숫자() = 3


 
주님, 이 사람들의 자녀들에게 물리학을 배울 기회를 주십시오.
 
Igor Makanu :

아니, 작동하지 않았다

그리고 확실히, 나는 문제가 무엇인지 이해합니다) 고칠 것입니다

 
Алексей Тарабанов :
주님, 이 사람들의 자녀들에게 물리학을 배울 기회를 주십시오.

부모가 없으면 왜합니까?

 

먼저 자신에게 대답하십시오. 소수점 이하 자릿수를 알아야하는 이유 는 무엇입니까? 무엇을 위해?

"숫자 포함"을 사용하는 유일한 올바른 방법은 해결 중인 문제의 프레임워크 내에서 미리 알려진 주어진 정밀도로 사용하는 것입니다.

다른 모든 것은 넌센스입니다.

나는 이중 모듈로의 값이 클수록 정확도가 낮고 모든 알고리즘(특히 문자열로 캐스팅하는 경우 일반적으로 이 이상임)이 엉망이 될 것이라는 사실에 대해서도 이야기하지 않습니다.

 
Mesaoria :

(특히 스트링으로 캐스팅하는 경우, 이것은 일반적으로 그 이상입니다) 망할 것입니다.

이것들은 표준 C++용이 아닌 MQL용 코드입니다. 그러면 C++에서 문자열로 작업하는 것은 무딘 "그리고 생각할 필요도 없습니다", MQL에서 내장 함수는 자체 작성 함수보다 빠릅니다.

 
Igor Makanu :

이것들은 표준 C ++가 아닌 MQL용 코드입니다. 그러면 C ++에서 문자열을 사용한 작업은 "무뚝뚝해지며" MQL 내장 함수가 자체 작성 함수보다 빠릅니다.

나는 그것에 대해 전혀 쓰지 않았다. 더블을 한 줄로 캐스팅하여 나중에 줄에서 문자 수를 세는 아이디어 - 이것은 완전한 게임입니다. 당신이 무엇을 하든지.

 
Mesaoria :

나는 그것에 대해 전혀 쓰지 않았다. 두 배를 한 줄에 캐스팅하여 나중에 줄에서 문자 수를 세는 아이디어 - 이것은 완전한 게임입니다. 당신이 무엇을 하든지.

예, 제 버전이 최고가 아닐 가능성이 높지만 이에 대해 더 일찍 찾지 못했기 때문에 이것이 제가 스스로 생각한 최선의 것입니다. 위의 의견에 이에 대해 썼지만 제안하지 않았습니다. 나만의 버전