MQL4 ve MQL5'te Rakamları () atlayarak herhangi bir sayıdan (sadece tırnak işaretleri değil) sonra ondalık basamak sayısını alma - sayfa 8

 
Igor Makanu :

hayır koşmaz...

Ah, evet, sıfırdan küçük sayılar için kasten yapıldığını unutmuşum, çünkü partiyi normalleştirirken kullanıldı. Düzeltildi, şimdi her şey yolunda:

 #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));
  }  

Sonuç:

 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'te kazanılan parayı "Merry Trader" çubuğuna yatıracağım. Londra'da açacağım.
 
Konstantin Gruzdev :

Ah, evet, sıfırdan küçük sayılar için kasten yapıldığını unutmuşum, çünkü partiyi normalleştirirken kullanıldı. Düzeltildi, şimdi her şey yolunda:

Sonuç:

hayır, işe yaramadı

çift f = 122334550.00999;

sonuç:

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


 
Tanrım, bu insanların çocuklarına fizik öğrenme fırsatı ver.
 
Igor Makanu :

hayır, işe yaramadı

ve elbette, sorunun ne olduğunu anlıyorum) düzelteceğim

 
Алексей Тарабанов :
Tanrım, bu insanların çocuklarına fizik öğrenme fırsatı ver.

Ebeveynler onsuz yaparsa neden?

 

İlk önce kendinize cevap verin - neden ondalık noktadan sonra kaç basamak bilmeniz gerekiyor? Ne için?

"Sayılarla çift" kullanmanın tek doğru yolu, çözülmekte olan problem çerçevesinde önceden bilinen belirli bir kesinlikle kullanmaktır.

Diğer her şey saçmalık.

Double modulo'nun değeri ne kadar büyük olursa - doğruluğu o kadar az ve herhangi bir algoritmanın (özellikle bir dizgeye döküm yaparken, bu genellikle ötesindedir) berbat olacağı gerçeğinden bahsetmiyorum bile.

 
Mesaoria :

(özellikle bir diziye döküm yaparken, bu genellikle ötesindedir) berbat olacaktır.

bunlar MQL için kodlardır ve standart C ++ için değil, o zaman C ++'da dizelerle çalışmak "ve daha akıllıca olmaz", MQL'de yerleşik işlevler kendi kendine yazılan işlevlerden daha hızlıdır

 
Igor Makanu :

bunlar MQL için kodlardır ve standart C ++ için değil, o zaman C ++'da dizelerle çalışmak "ve daha akıllıca olmaz", MQL'de yerleşik işlevler kendi kendine yazılan işlevlerden daha hızlıdır

Bunun hakkında hiç yazmadım. Bir satıra çift atma fikri, böylece daha sonra satırda karakterleri saymak - bu tam bir oyundur. Ne yaparsan yap.

 
Mesaoria :

Bunun hakkında hiç yazmadım. Bir satıra çift atma fikri, böylece daha sonra satırda karakterleri saymak - bu tam bir oyundur. Ne yaparsan yap.

Evet, benim versiyonum büyük ihtimalle en iyisi değil ama daha önce bununla ilgili bir şey bulamadığım için kendi başıma en iyi düşündüğüm şey bu, bunu yukarıdaki yorumlarda yazmıştım ama siz teklif etmemişsiniz. kendi versiyonun