Spanish Problema con redondeo

Edu Portu

Member
Licensed User
Longtime User
La siguiente instruccion
Round2(4.225, 2)
me devuelve 4.22 cuando tendria que devolver 4.23, hay alguna manera de solucionarlo?

Next sentence
Round2(4.225, 2)
return 4.22 and then correct return may be 4.23, can anyone help me?

Saludos
Edu
 

dar2o3

Active Member
Licensed User
Longtime User
Buenos días,texto sacado de wikipedia: tu caso creo que sería el d.

Método de redondeo[editar]
En los siguientes ejemplos, se desea redondear cada número a las centésimas (el último dígito requerido es el segundo dígito después de la coma decimal):

a) 4,123 ⇒ Regla 1: Si el dígito a la derecha del último requerido es menor que 5, el último dígito requerido se deja intacto. Respuesta: 4,12

b) 8,627 ⇒ Regla 2: Si el dígito a la derecha del último requerido es mayor que 5, el último dígito requerido se aumenta una unidad. Respuesta: 8,63

c) 9,425010 ⇒ Regla 3: Si el dígito a la derecha del último requerido es un 5 no seguido de ceros, el último dígito requerido se aumenta una unidad. Respuesta: 9,43

d) 7,385 o 7,385000 ⇒ Regla 4: Si el dígito a la derecha del último requerido es un 5 no seguido de dígitos (o seguido de ceros), el último dígito requerido se deja intacto si es par. Respuesta: 7,38

e) 6,275 o 6,275000 ⇒ Regla 5: Si el dígito a la derecha del último requerido es un 5 no seguido de dígitos (o seguido de ceros), el último dígito requerido se aumenta una unidad si es impar. Respuesta: 6,28
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Dar2o3 te ha dicho la respuesta correcta.

El redondeo es un debate que ocupa multitud de paginas y al final te deja igual.
El motivo de ese metodo es que basado en que si los valores son inferiores a 5 (1,2,3,4) no hay redondeo y si es 5 o mayor si (5,6,7,8,9) y para promediar dependera tambien del valor del segundo digito para que te de un valor u otro, si en vez de poner tu numero 4.225, pones 4.205 te devuelve 4,21 que es correcto, y si escribes 4.245 te devuelve 4.25 que es correcto y no entra en la norma que no lo hace a los pares , sin embargo con 4.265 te devuelve 4,26 que es incorrecto y vuelve a ser par.

Erel aconseja utiizar NumberFormat2 en vez del Round2, por que dice que funciona "mejor"

Si quieres que te de siempre valores correctos o añades un decimal que no sea 0 al final (cuarto decimal), o te haces una rutina que te haga bien el redondeo.

B4X:
   Dim x As Double
   
    x= 4.225
    x = x + 0.0001
   
    Log(Round2(x,2)) ' devuelve 4.23

Saludos
 

pamoxi

Member
Licensed User
Longtime User
A los fines de cálculo monetario comercial, cuando el último dígito es 5, se redondea al mayor siguiente.
Es la norma normalmente aceptada en redondeo de precios y valores.
7,385 = 7,39
7,375 = 7,38
7,3855 = 7,39
7,384 = 7,38
7,3845 = 7,38
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola pamoxi

A los fines de cálculo monetario comercial, cuando el último dígito es 5, se redondea al mayor siguiente

Si, eso ya lo sabemos y tanto Edu Porto, dar2o3 y yo lo hemos comentado mas arriba, es el motivo de este Post , no es un problema de no saber interpretar un cálculo comercial, es un problema de como se comportan las intrucciones NumberFormat2 y Round2, que no hacen bien esa conversión o redondeo por un problema de promedios (lo explico arriba), de ahi a darle la solución a Edu Porto de añadir el cuarto decimal para que el redondeo sea el correcto.

Saludos
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…