Error de cálculo en macro

06/12/2008 - 13:30 por valoro | Informe spam
Prueba esta macro:

Sub fallo()
MsgBox Int(6 / 0.2)
End Sub

a mi el resultado me da 29, y debiera ser 30.

La he probado en Excel 2003 y en Excel 2007, y en ambos produce el
mismo fallo.

¿Alguna idea de porque se produce este error?

Preguntas similare

Leer las respuestas

#1 pepe
06/12/2008 - 18:42 | Informe spam
es debido a la representación interna del numero. 0.2 no se puede
representar con total precisión y de ahí viene el error.

Aquí tienes más información.
http://portal.acm.org/citation.cfm?doid53445.1353446


"valoro" escribió en el mensaje de noticias
news:
Prueba esta macro:

Sub fallo()
MsgBox Int(6 / 0.2)
End Sub

a mi el resultado me da 29, y debiera ser 30.

La he probado en Excel 2003 y en Excel 2007, y en ambos produce el
mismo fallo.

¿Alguna idea de porque se produce este error?
Respuesta Responder a este mensaje
#2 pepe
06/12/2008 - 18:43 | Informe spam
es debido a la representación interna del numero. 0.2 no se puede
representar con total precisión y de ahí viene el error.
este es el enlace correcto:
http://arxiv.org/PS_cache/cs/pdf/07...1192v5.pdf

"valoro" escribió en el mensaje de noticias
news:
Prueba esta macro:

Sub fallo()
MsgBox Int(6 / 0.2)
End Sub

a mi el resultado me da 29, y debiera ser 30.

La he probado en Excel 2003 y en Excel 2007, y en ambos produce el
mismo fallo.

¿Alguna idea de porque se produce este error?
Respuesta Responder a este mensaje
#3 Héctor Miguel
06/12/2008 - 22:27 | Informe spam
hola, 'anonimo/a' !

Prueba esta macro:
Sub fallo()
MsgBox Int(6 / 0.2)
End Sub
a mi el resultado me da 29, y debiera ser 30.
La he probado en Excel 2003 y en Excel 2007, y en ambos produce el mismo fallo.
Alguna idea de porque se produce este error?



(hasta donde se) vba y excel "reaccionan" diferente a los "errores de aritmetica de punto flotante"
algunas veces vba "extiende" el punto flotante mas alla que la aplicacion (excel)
otras veces resulta al contrario, y como estamos hablando de devolver la parte entera Int(...)
cambia la instruccion del cuadro de mensaje a cualquiera de las siguientes alternativas:

msgbox [int(6/.2)]

msgbox evaluate("int(6/.2)")

donde se esta preguntando a la aplicacion (excel) cual seria el resultado (NO a vba) ;)

saludos,
hector.
Respuesta Responder a este mensaje
#4 valoro
06/12/2008 - 23:43 | Informe spam
Gracias Pepe y gracias Herctor Miguel.

Imaginaba que se trataba del problema típico de que los cálculos
internos no se hacen en decimal y por tanto pueden pasar estos
inconvenientes.

Para cálculo científico o cálculo numérico intensivo no es muy
recomendable VBA.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida