CUIDADO CON ESTO
CUIDADO CON ESTO
Parece surrealista, pero lo que acabo de descubrir lo puede comprobar quien quiera en dos minutos.
(114.78 - 114.56) = 0.22 ¿Qué creeis, que es cierto o que es falso?
Pues si esta condición se pone en Visual Chart da falso.
AVISO A NAVEGANTES: Visual Chart resta mal. Por si le faltaba algo.
¿Conocía alguien este error?
Tengo la versión 3. A ver si alguno me puede decir si también pasa con la versión 4.
Y lo jodido es que al restar mal y dar falso, el flujo de programa se va por donde no debe.
Más ejemplos que también funcionan mal:
(114.51 - 114.50) = 0.01
(0.15 - 0.01) = 0.14
(0.18 - 0.01) = 0.17
Yo siempre he pensado que Visual Chart es lo más cómodo, lo cual compensaba sus errores, pero este fallo ya es la leche y creo que no voy a poder convivir con él.
Es mi primer mensaje en el foro aunque llevo ya un tiempo leyendo por aquí. Saludos.
(114.78 - 114.56) = 0.22 ¿Qué creeis, que es cierto o que es falso?
Pues si esta condición se pone en Visual Chart da falso.
AVISO A NAVEGANTES: Visual Chart resta mal. Por si le faltaba algo.
¿Conocía alguien este error?
Tengo la versión 3. A ver si alguno me puede decir si también pasa con la versión 4.
Y lo jodido es que al restar mal y dar falso, el flujo de programa se va por donde no debe.
Más ejemplos que también funcionan mal:
(114.51 - 114.50) = 0.01
(0.15 - 0.01) = 0.14
(0.18 - 0.01) = 0.17
Yo siempre he pensado que Visual Chart es lo más cómodo, lo cual compensaba sus errores, pero este fallo ya es la leche y creo que no voy a poder convivir con él.
Es mi primer mensaje en el foro aunque llevo ya un tiempo leyendo por aquí. Saludos.
hmm, no es por enredar pero dudo mucho que un programa "reste mal". Sobre todo porque la operación -resta- no la han definido en el equipo de programadores de VChart.
Seguramente es un lapsus tuyo, de tu código. Para empezar, ¿no habrás confundido el símbolo igual (=) de asignación como el símbolo igual (==) de comparación ?
es decir, no es lo mismo :
if (a = b) { // en este caso estás asignando, y el resultado lógico podría se "false"
podría ser que escribieras :
if ((114.51 - 114.50) = 0.01 ) --> esto es una asignación como resultado "false", puesto q no se puede asignar el valor 0.01 a la operación (114.51 - 114.50)
Lo correcto sería:
if (a==b) { // aquí estás comparando, y aquí si puedes hacer if ((114.51 - 114.50) == 0.01 )
en fin, si no es eso, tendrás que dar más datos para ver dónde está el error
saludos
Seguramente es un lapsus tuyo, de tu código. Para empezar, ¿no habrás confundido el símbolo igual (=) de asignación como el símbolo igual (==) de comparación ?
es decir, no es lo mismo :
if (a = b) { // en este caso estás asignando, y el resultado lógico podría se "false"
podría ser que escribieras :
if ((114.51 - 114.50) = 0.01 ) --> esto es una asignación como resultado "false", puesto q no se puede asignar el valor 0.01 a la operación (114.51 - 114.50)
Lo correcto sería:
if (a==b) { // aquí estás comparando, y aquí si puedes hacer if ((114.51 - 114.50) == 0.01 )
en fin, si no es eso, tendrás que dar más datos para ver dónde está el error
saludos
No es eso. Visual Chart utiliza el operador = tanto para asignar como para comparar.
Es muy sencillo reproducir el error y no se tarda nada: crear un sistema en el que haceis la pregunta (114.78 - 114.56) = 0.22 y si da cierto comprais y si da falso vendeis, y aplicais el sistema a cualquier gráfico. Ya vereis como da falso. Es muy fuerte.
A ver si alguien que tenga la versión 4 lo prueba y me dice si también ocurre con esa versión. Gracias.
Es muy sencillo reproducir el error y no se tarda nada: crear un sistema en el que haceis la pregunta (114.78 - 114.56) = 0.22 y si da cierto comprais y si da falso vendeis, y aplicais el sistema a cualquier gráfico. Ya vereis como da falso. Es muy fuerte.
A ver si alguien que tenga la versión 4 lo prueba y me dice si también ocurre con esa versión. Gracias.
Hola,
Pues en la versión 4 pasa exactamente lo mismo. Y es que el problema viene del propio Visual Basic, no del Visual Chart.
En general ocurre con todas las aplicaciones de Microsoft. Al usar la doble precisión por defecto para los valores decimales, se llega a liar con tanto decimal y pasan barbaridades como esa.
Para ello lo mejor es usar el tipo de datos Currency para las variables si no vamos a necesitar más de cuatro decimales. De esa forma no se produce el error.
En el caso de constantes, podemos forzar que se traten como de tipo Currency añadiendo al final del número el símbolo arroba: (114.78@ - 114.56@) = 0.22@
Ha sido una buena observación morgan. Esto nos demuestra una vez más que hay que tener mil ojos
.
Saludos.
Pues en la versión 4 pasa exactamente lo mismo. Y es que el problema viene del propio Visual Basic, no del Visual Chart.
En general ocurre con todas las aplicaciones de Microsoft. Al usar la doble precisión por defecto para los valores decimales, se llega a liar con tanto decimal y pasan barbaridades como esa.
Para ello lo mejor es usar el tipo de datos Currency para las variables si no vamos a necesitar más de cuatro decimales. De esa forma no se produce el error.
En el caso de constantes, podemos forzar que se traten como de tipo Currency añadiendo al final del número el símbolo arroba: (114.78@ - 114.56@) = 0.22@
Ha sido una buena observación morgan. Esto nos demuestra una vez más que hay que tener mil ojos

Saludos.
Que no, que es un problema que viene de hace muchos años ya. Para ello, Microsoft se curró el tipo de datos Currency. Antes era un lío para calcular un simple IVA.H.Seldon escribió:![]()
![]()
![]()
la verdad es que alucino.
y... no estareis usando los valores como enteros cuando deberíais declararlos como float o double o decimal ... (no sé cómo se llaman en VBasic) ?
saludos

Si pruebas el ejemplo que puso morgan verás que con variables o con constantes, el problema es el mismo.
Saludos.
De todas formas morgan o Homer, mi problema es que no controlo la programación en VBasic / VChart.
¿seríais tan amables de colgar un ejemplo muy simple?
Digamos, un indicador que pinte una línea (una horizontal y ya está)
Si (114.78 - 114.56) = 0.22 que la pinte en 1
Si no, que la pinte en 0
si lleva más de un minuto, no os molestéis. gracias.
¿seríais tan amables de colgar un ejemplo muy simple?
Digamos, un indicador que pinte una línea (una horizontal y ya está)
Si (114.78 - 114.56) = 0.22 que la pinte en 1
Si no, que la pinte en 0
si lleva más de un minuto, no os molestéis. gracias.
Prueba el sistema siguiente en cualquier gráfico y lo verás.
Saludos.
Saludos.
- Adjuntos
-
- VBkaka.vba
- (95.5 KiB) Descargado 137 veces
Si te ha gustado este hilo del Foro, ¡compártelo en redes!