Arrotondamento dei numeri in MT4 tramite NormalizeDouble - pagina 11

 
Алексей Тарабанов:

E il tuo è sbagliato, mi dispiace...

Perché?

void OnStart()
  {
   for(int i=1;i<=9;i++)
     {
      double v1=0.1*i;

      Print("v1 = ",v1," = ",DoubleToString(MathCeil(v1),2));
     }
  }

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.1 = 1.00

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.2 = 1.00

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.3 = 1.00

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.4 = 1.00

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.5 = 1.00

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.6 = 1.00

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.7 = 1.00

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.8 = 1.00

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.9 = 1.00

Il tuo esempio:

0.1+0.5=0.6 = 1

0.2+0.5=0.7 = 1

0.3+0.5=0.8 = 1

0.4+0.5=0.9 = 1

0.5+0.5=1.0 = 1

0.6+0.5=1.1 = 1

0.7+0.5=1.2 = 1

0.8+0.5=1.3 = 1

0.9+0.5=1.4 = 1

 
lilita bogachkova:

Perché?

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.1 = 1.00

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.2 = 1.00

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.3 = 1.00

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.4 = 1.00

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.5 = 1.00

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.6 = 1.00

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.7 = 1.00

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.8 = 1.00

0 22:49:08.463 ! test GBPUSDbc,H1: v1 = 0.9 = 1.00

Il tuo esempio:

0.1+0.5=0.6 = 1

0.2+0.5=0.7 = 1

0.3+0.5=0.8 = 1

0.4+0.5=0.9 = 1

0.5+0.5=1.0 = 1

0.6+0.5=1.1 = 1

0.7+0.5=1.2 = 1

0.8+0.5=1.3 = 1

0.9+0.5=1.4 = 1

Perché l'affermazione"int A = doppio B + 0,5" è risolta: int A = (int)MathCeil(doppio B); errato.
 
Алексей Тарабанов:
Perché l'affermazione"int A = doppio B + 0,5" è risolta: int A = (int)MathCeil(doppio B); errato.
Quindi come si risolve?
 
lilita bogachkova:
Quindi come si risolve?
Corretto, cioè come ho detto. Prima si aggiunge 0,5 al numero frazionario, poi si sottrae la parte frazionaria dal risultato e si arrotonda il risultato a un numero intero.
 
Dmitry Fedoseev:

Che ne dite di questo?

Allora 5
 
Алексей Тарабанов:
Corretto, cioè come ho detto. Prima si aggiunge 0,5 al numero frazionario, poi si sottrae la parte frazionaria dal risultato e si arrotonda il risultato all'intero.
Il codice?
 
lilita bogachkova:
Quindi come si risolve?
Non può spiegare. Non disturbatelo.
 
Vasyl Nosal:
Il codice?
int A = doppio B + 0,5
 
Алексей Тарабанов:
Corretto, cioè come ho detto. Prima si aggiunge 0,5 al numero frazionario, poi si sottrae la parte frazionaria dal risultato e si arrotonda il risultato all'intero.
Bene, allora dovete scrivere a servicedesk che hanno inventato una tale funzione extraMathCeil():)
 
Vasyl Nosal:
Non può spiegare. Non disturbatelo.
Vas, non disturbare la conversazione, se non ti dispiace
Motivazione: