Algué pode me falar qual função eu uso para arredondar um valor sempre pra 0 ou 5?
Uma vez que na BMF o Indice anda de 5 em 5 pontos
Ou seja se eu dividir 60155 por 2 (60155/2) vai dar = 30077,5, então a função arredondaria para 30080
Olá Guilherme Mendonca,
Por favor dê uma olhada nas funções MathMod e NormalizeDouble.
Elas podem ser utilizadas para tal finalidade.
Abraços,
Malacarne
Para arredondar tem que fazer a divisão para achar o resto, aqui um exemplo de arrendondar pra cima:
precoParaWIN = (int) MathCeil(precoQuebrado90147.66959); precoParaWIN = (int)(precoParaWIN+(5-MathMod(precoParaWIN,5)));
Ao invés de usar MathCeil, pode-se usar o NormalizeDouble como o rodrigo falou
Para arredondar tem que fazer a divisão para achar o resto, aqui um exemplo de arrendondar pra cima:
Ao invés de usar MathCeil, pode-se usar o NormalizeDouble como o rodrigo falou
Rapaz, valeu Jonatas !
Procurei muito nos foruns e a sua resposta foi a solução.
Obrigado por compartilhar.
Oi pessoal!
A minha dúvida caminha paralelamente a do tópico (se julgarem necessário crio outro específico para não poluir este).
Precisava arredondar números inteiros para unidade 0 quando a unidade for 1, 2, 3, ou 4 e para unidade 5 quando a unidade for 6,7, 8 ou 9. 0 e 5 permanecendo no mesmo jeito.
De maneira que os seguintes inteiros:
0,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20.
Ficariam assim:
0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 20.
Alguma luz nesse sentido?
Oi pessoal!
A minha dúvida caminha paralelamente a do tópico (se julgarem necessário crio outro específico para não poluir este).
Precisava arredondar números inteiros para unidade 0 quando a unidade for 1, 2, 3, ou 4 e para unidade 5 quando a unidade for 6,7, 8 ou 9. 0 e 5 permanecendo no mesmo jeito.
De maneira que os seguintes inteiros:
0,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20.
Ficariam assim:
0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 10, 10, 10, 10, 10, 15, 15, 15, 15, 15, 20.
Alguma luz nesse sentido?
De uma maneira simples usando a parte inteira da divisão por 5, você consegue.
Ex:
0/5 = 0
1/5 = 0,2
2/5 = 0,4
3/5 = 0,6
4/5 = 0,8
5/5 = 1,0
6/5 = 1,2
7/5 = 1,4
8/5 = 1,6
9/5 = 1,8
10/5 = 2,0
11/5 = 2,2
Dessa forma dá pra perceber que há um padrão, que pode ser representado pela seguinte fórmula:
Resultado = Quociente_Inteiro*5
Tomando 11/5 como exemplo:
Resultado = 2*5 = 10
EDIT: Havia escrito "Resto" nos exemplos
Oi pessoal!
.....
void Round(double n, int x) { Print(floor(n/x)*x); } void OnStart() { //--- Round(368, 5); }
De uma maneira simples usando a parte inteira da divisão por 5, você consegue.
Ex:
Resto de 0/5 = 0
Resto de 1/5 = 0,2
Resto de 2/5 = 0,4
Resto de 3/5 = 0,6
Resto de 4/5 = 0,8
Resto de 5/5 = 1,0
Resto de 6/5 = 1,2
Resto de 7/5 = 1,4
Resto de 8/5 = 1,6
Resto de 9/5 = 1,8
Resto de 10/5 = 2,0
Resto de 11/5 = 2,2
Dessa forma dá pra perceber que há um padrão, que pode ser representado pela seguinte fórmula:
Resultado = Quociente_Inteiro*5
Tomando 11/5 como exemplo:
Resultado = 2*5 = 10
Que solução elegante! Matematicamente simples e resolve o problema. Suponho que deva criar uma variável do tipo inteira pra representar o quociente. Correto? (assim ele ignora o ponto flutuante na hora do próximo cálculo)
Apenas mais uma sugestão.... Para obter automaticamente o valor do tick padrão do ativo:
tickSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE); preco = round(preco / tickSize) * tickSize;
O código acima faz exatamente o que o @ billy010190 disse, usa a parte inteira da divisão para multiplicar por um número que quer arredondar.
Ótimo! Não conhecia essa função. Obrigado!
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Algué pode me falar qual função eu uso para arredondar um valor sempre pra 0 ou 5?
Uma vez que na BMF o Indice anda de 5 em 5 pontos
Ou seja se eu dividir 60155 por 2 (60155/2) vai dar = 30077,5, então a função arredondaria para 30080