Visual Basic - funcion round

Life is soft - evento anual de software empresarial
 
Vista:

funcion round

Publicado por maro (83 intervenciones) el 22/10/2001 23:18:33
la funcion round falla, por ejemplo round(3.345,2) da 3.34 en vez de 3,35
¿Alguien sabe porqué? ¿Como solucionarlo?
Como informacion tengo instalado el SP5
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:funcion round

Publicado por alberto (278 intervenciones) el 23/10/2001 16:11:57
No falla, el funcionamiento estandar de esa función, y todas las de redondeo en VB es ese, es decir, en el caso extremo que tu planteas no se redondea al número superior sino al par más proximo, así
Round(3.345,2) da como resultado 3,34 mientras que round(3.355,2) dará como resultado 3,36.
Para obtener el resultado que deseas lo que se me ocurre es que escribas una función que cuando estemos en el caso extremo redondee por exceso y en los demas casos utilice los redondeos normales de VB.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:funcion round

Publicado por Maro (83 intervenciones) el 24/10/2001 01:36:11
En principio es una contradiccion ya que esa funcion deberia de estar de acuerdo con la funcion ROUND del acces o de la excell y si compruenas en excell round(3.345,2) da 3.35 cosa que es logica ya que es asi como se define la funcion redondear en matematicas, si al cifra siguiente es 5 o superior la anterior se aumenta en 1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:funcion round

Publicado por alberto (278 intervenciones) el 25/10/2001 09:22:41
Es cierto que esa función esta definida en matemáticas como tu dices, pero en otras ciencias dicha función esta definida de otras maneras, p. ej. en Química, según me han dicho gente que conoce profuncamente el tema, está definida tal como la define el VB. El hecho de que VB elija un método u otro de redondeo es un caso aparte.
Lo que si es una contradicción, es que productos del mismo fabricante de SW trabajen distinto a nivel de redondeo, y que además no encontremos ninguna explicación de que método de redondeo se emplea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:funcion round

Publicado por José Antonio (10 intervenciones) el 02/11/2001 12:45:44
Vamos a ver, creo que habeis entrado en un tema algo delicado, realmente round funciona correctamente. Redondea al alza cuando el primer decimal o los sucesivos son "5", por lo tanto funciona correctamente. Este problema se me planteo a mi tambien hace ya algún tiempo, y es que round no funciona con digitos que se han pasado por la funcion format(numero, "###,###.##"), osea la funcion round no funciona correctamente sobre "3.452,5" por el tema de los puntos y las comas, quitarles el formato a dicho digito pasarle round y volver a pasarle formato, todo funciona correctamente.
Espero que os sirva de ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:funcion round

Publicado por alberto (278 intervenciones) el 06/11/2001 10:02:56
Lo siento Jose Antonio, pero el problema del que hablamos no tiene nada que ver con el tema de la configuración regional, ni la conversión de cadenas a datos de tipo númerico, si no prueba con el siguiente código:

Dim r As Long, x As Long

r = Round(2.5, 0)
x = Round(3.5, 0)

al finalizar r valdrá 2 mientras que x valdrá 4, ya que en la situación extrema en la que nos en encontramos la función Round redondea al par mas próximo.

Espero que la importancia de dichos redondeos en tus códigos no sea vital.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

funcion round

Publicado por JOSE ALBERTO VARGAS (1 intervención) el 18/04/2019 00:32:47
round(3.345,2) da 3.34 en vez de 3,35 .

Haga esto: Round((3.345+0.0001),2) y le dará 3.35 si quiere aproximarlo por encima.
Esto porque VB es imparcial 50% 50% y aproxima al siguiente si pasa del 50% +0.0001.
Exitos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar