Arredondamento de números em MT4 via NormalizeDouble - página 11

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

E o seu está errado, desculpe...

Por quê?

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 ! testes GBPUSDbc,H1: v1 = 0.1 = 1.00

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

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

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

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

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

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

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

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

Seu exemplo:

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:

Por quê?

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

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

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

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

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

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

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

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

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

Seu exemplo:

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

Porque a afirmação"int A = duplo B + 0,5" é resolvida: int A = (int)MathCeil(duplo B); incorreto.
 
Алексей Тарабанов:
Porque a afirmação"int A = duplo B + 0,5" é resolvida: int A = (int)MathCeil(duplo B); incorreto.
Então, como é resolvido?
 
lilita bogachkova:
Então, como se resolve isso?
Correto, ou seja, como eu disse. Primeiro, 0,5 é adicionado ao número fracionário, e então a parte fracionada é subtraída do resultado e o resultado é arredondado para um número inteiro.
 
Dmitry Fedoseev:

Que tal isso?

Então 5
 
Алексей Тарабанов:
Correto, ou seja, como eu disse. Primeiro, 0,5 é adicionado ao número fracionário, e depois a parte fracionada é subtraída do resultado e o resultado é arredondado para inteiro.
O código?
 
lilita bogachkova:
Então, como se resolve isso?
Ele não consegue explicar. Não o perturbe.
 
Vasyl Nosal:
O código?
int A = duplo B + 0,5
 
Алексей Тарабанов:
Correto, ou seja, como eu disse. Primeiro, 0,5 é adicionado ao número fracionário e depois a parte fracionária é subtraída do resultado e o resultado é arredondado para inteiro.
Bem, então você precisa escrever para Servicedesk, que eles inventaram uma função tão extraMathCeil():)
 
Vasyl Nosal:
Ele não consegue explicar. Não o perturbe.
Vas, não perturbe a conversa, por favor.