Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
3. `string FormatMoney(double amount)` formatea un valor doble `amount` como una cadena que representa un importe monetario. Formatea el importe con dos decimales, sustituye el punto decimal por una coma e inserta espacios cada tres dígitos para facilitar la lectura. También añade el símbolo de moneda obtenido de `AccountInfoString(ACCOUNT_CURRENCY)` al final.
Muchas gracias por ello. Sin embargo, estas funciones ya están implementadas en la librería (incluso con resultados más robustos que los tuyos), pero con nombres diferentes.
Hola @amrali, gracias por tu aportación.
¿Quizás se trate de un bug?
Esperaba que la segunda impresión fuera "0.0001".
Si es un error, ¿cómo solucionarlo? Si no, ¿qué hay de malo en mi código?
Gracias.
Hola @amrali, gracias por tu aportación.
¿Quizás se trate de un bug?
Esperaba que la segunda impresión fuera "0.0001".
Si es un error, ¿cómo solucionarlo? Si no, ¿qué hay de malo en mi código?
Gracias.
Imprime las representaciones hexadecimales y comprenderás que la dispersión dista mucho del verdadero valor real 0,0001 (eso se debe a errores de redondeo durante la resta).
Por lo tanto, tienes que utilizar procedimientos de redondeo.
Hay sublte diferencias que usted debe notar:
StripError() redondea al decimosexto dígito significativo 0.00009999999999998899 (los 0 no se cuentan).
Round(x, 16) redondea a los 16 dígitos después del punto decimal 0.00009999999999998899
El punto flotante tiene un número infinito de decimales. Eres tú, que no entiendes floating-point y que algunos números no se pueden representar exactamente. (como 1/10.)
Formato de punto flotante de doble precisión - Wikipedia
Vea también El operando ==. - Foro de programación MQL4 (2013)
pregunta sobre la decima de marketinfo() - Foro de programación MQL4 (2016)
El punto flotante tiene un número infinito de decimales. Eres tú, que no entiendes el punto flotante y que algunos números no se pueden representar exactamente. (como 1/10.)
Formato de punto flotante de doble precisión - Wikipedia
Vea también El operando ==. - Foro de programación MQL4 (2013)
pregunta sobre la decima de marketinfo() - Foro de programación MQL4 (2016)
Cuál es la forma más optimizada de Imprimir sólo dígitos significativos con dobles.
Esta función funciona muy bien para el 99,9% de los números, pero tiene problemas con números redondos como 1.0000000000
Mi problema es que tengo que quitar los dígitos no significativos, y por alguna razón no soy capaz de hacerlo utilizando sólo @Trunc,
así que terminé usando algo como:
Funciona exactamente como lo necesitaba, me da la cadena más pequeña posible para todos los números, pero me preguntaba si se puede optimizar y aún así obtener la cadena más pequeña con números redondos como 1.00000000
Gracias
Acabo de darme cuenta de que estoy usando
versión ligeramente modificada de su
y este es el código
Mi problema es que necesito eliminar los dígitos no significativos, y por alguna razón no soy capaz de hacerlo utilizando sólo @Trunc,
así que terminé usando algo como:
Funciona exactamente como se necesita, dándome la cadena más pequeña posible para todos los números, pero me preguntaba si se puede optimizar y aún así obtener la cadena más pequeña con números redondos como 1.00000000
Gracias
Lo siento, tienes que entender lo que son dígitos significativos ya que tu código confunde los conceptos básicos.
Gracias por tu tiempo, y sí, no estoy totalmente seguro de entender 'dígitos significativos'.
Básicamente necesito 'Imprimir' el número más corto posible. Por ejemplo
1.0000000 -> 1
1.0090000 -> 1.009
123.00100 -> 123.001
Para mí 'dígitos significativos' significa: dígito que cambia el valor de un número si se elimina, por lo que los ceros al final no son significativos.
Por cierto, desde la última actualización de Windows la función Round(double, int) hace que MT4 se bloquee. El primer código que publiqué funcionaba perfectamente y desde ayer por la noche congela completamente el cliente MT4.
Gracias por tu tiempo, y sí, no estoy totalmente seguro de entender "dígitos significativos".
Básicamente necesito 'Imprimir' el número más corto posible. Por ejemplo:
1.0000000 -> 1
1.0090000 -> 1.009
123.00100 -> 123.001
Para mí "dígitos significativos" significa: dígito que cambia el valor de un número si se elimina, por lo que los ceros al final no son significativos.
Por cierto, desde la última actualización de Windows la función Round(double, int) está haciendo que MT4 se bloquee. El primer código que publiqué funcionaba perfectamente y desde ayer por la noche congela completamente el cliente MT4.