Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
3. `string FormatMoney(double amount)` formata um valor duplo `amount` como uma string que representa um valor monetário. Ele formata o valor com duas casas decimais, substitui o ponto decimal por uma vírgula e insere espaços a cada três dígitos para facilitar a leitura. Ele também adiciona o símbolo de moeda obtido de `AccountInfoString(ACCOUNT_CURRENCY)` no final.
Muito obrigado por isso. Entretanto, essas funções já estão implementadas na biblioteca (inclusive com resultados mais robustos do que os seus), mas com nomes diferentes.
Olá @amrali, obrigado por sua contribuição.
Talvez isso seja um bug?
Eu esperava que a segunda impressão fosse "0,0001".
Se for um bug, como corrigi-lo? Caso contrário, o que há de errado em meu código?
Muito obrigado.
Olá @amrali, obrigado por sua contribuição.
Talvez isso seja um bug?
Eu esperava que a segunda impressão fosse "0,0001".
Se for um bug, como corrigi-lo? Caso contrário, o que há de errado em meu código?
Muito obrigado.
Imprima as representações hexadecimais e você entenderá que o spread está longe do valor real verdadeiro de 0,0001 (isso se deve a erros de arredondamento durante a subtração).
Portanto, você precisa usar procedimentos de arredondamento.
Há diferenças sutis que você deve observar:
StripError() arredonda para o 16º dígito significativo 0,00009999999999998899 (0's não são contados).
Round(x, 16) arredonda para o 16º dígito após o ponto decimal 0,00009999999999998899
O ponto flutuante tem um número infinito de casas decimais. O problema é que você não entende o que é ponto flutuante e que alguns números não podem ser representados exatamente. (como 1/10.)
Formato de ponto flutuante de precisão dupla - Wikipedia
Veja também o operando ==. - Fórum de programação MQL4 (2013)
Se você quiser ver o número correto de dígitos, converta-o em uma string com a precisão correta/desejada.
question about decima of marketinfo() - MQL4 programming forum (2016)
O ponto flutuante tem um número infinito de casas decimais. O problema é que você não entende o que é ponto flutuante e que alguns números não podem ser representados exatamente. (como 1/10.)
Formato de ponto flutuante de precisão dupla - Wikipedia
Veja também o operando ==. - Fórum de programação MQL4 (2013)
Se você quiser ver o número correto de dígitos, converta-o em uma string com a precisão correta/desejada.
pergunta sobre decima de marketinfo() - Fórum de programação MQL4 (2016)
Qual é a maneira mais otimizada de imprimir apenas dígitos significativos com duplas.
Essa função funciona muito bem para 99,9% dos números, mas tem problemas com números redondos como 1.0000000000
Meu problema é que preciso remover os dígitos não significativos e, por algum motivo, não consigo fazer isso usando apenas @Trunc,
então acabei usando algo como:
Ele funciona exatamente como necessário, fornecendo a menor cadeia de caracteres possível para todos os números, mas gostaria de saber se ele pode ser otimizado e ainda obter a menor cadeia de caracteres com números redondos como 1.00000000
Obrigado pela atenção
Acabei de perceber que estou usando
Uma versão ligeiramente modificada do seu
e este é o código
Meu problema é que preciso remover os dígitos não significativos e, por algum motivo, não consigo fazer isso usando apenas @Trunc,
então acabei usando algo como:
Ele funciona exatamente como necessário, fornecendo a menor cadeia de caracteres possível para todos os números, mas gostaria de saber se ele pode ser otimizado e ainda obter a menor cadeia de caracteres com números redondos como 1,00000000
Obrigado pela atenção
Desculpe, mas você precisa entender o que são dígitos significativos, pois acho que seu código está confundindo os conceitos básicos.
Obrigado pelo seu tempo e, sim, não tenho certeza se entendi "dígitos significativos
Basicamente, preciso "imprimir" o menor número possível. Por exemplo:
1.0000000 -> 1
1.0090000 -> 1.009
123.00100 -> 123.001
Para mim, "dígitos significativos" significa: dígito que altera o valor de um número se for removido, portanto, os zeros à direita não são significativos.
A propósito, desde a última atualização do Windows, a função Round(double, int) está causando o bloqueio do MT4. O primeiro código que postei estava funcionando perfeitamente e, desde ontem à noite, ele congela completamente o cliente MT4.
Obrigado pelo seu tempo e, sim, não tenho certeza se entendi bem o que são "dígitos significativos
Basicamente, preciso "imprimir" o menor número possível. Por exemplo:
1.0000000 -> 1
1.0090000 -> 1.009
123.00100 -> 123.001
Para mim, "dígitos significativos" significa: dígito que altera o valor de um número se for removido, portanto, zeros à direita não são significativos.
A propósito, desde a última atualização do Windows, a função Round(double, int) está causando o bloqueio do MT4. O primeiro código que postei estava funcionando perfeitamente e, desde ontem à noite, ele congela completamente o cliente MT4.