Foros del Web » Programación para mayores de 30 ;) » Java »

Nuevo en Java, Aproximación de valores.

Estas en el tema de Nuevo en Java, Aproximación de valores. en el foro de Java en Foros del Web. Hola foreros. Tengo una duda. Recién estoy comenzando a aprender Java y hay algo que no logro comprender. Quero aproximar un BigDecimal: Código: BigDecimal valor ...
  #1 (permalink)  
Antiguo 09/01/2012, 12:35
 
Fecha de Ingreso: agosto-2008
Mensajes: 198
Antigüedad: 15 años, 9 meses
Puntos: 27
Nuevo en Java, Aproximación de valores.

Hola foreros. Tengo una duda. Recién estoy comenzando a aprender Java y hay algo que no logro comprender. Quero aproximar un BigDecimal:
Código:
BigDecimal valor = new BigDecimal(1.705);
BigDecimal valorAproximado = valor.setScale(2,BigDecimal.ROUND_HALF_UP);
System.out.println(valorAproximado);
La aproximación de "1.705" a 2 decimales es 1.71

Sin embargo si hago esto:
Código:
BigDecimal valor = new BigDecimal(0.705);
BigDecimal valorAproximado = valor.setScale(2,BigDecimal.ROUND_HALF_UP);
System.out.println(valorAproximado);
Me imprime 0.70

¿Por qué no me imprime 0.71? ¿Es esta la manera correcta de aproximar si manejar valor exactos (dinero)?

Gracias por leer.

P.D.: Estoy trabajando sobre java 6.
  #2 (permalink)  
Antiguo 09/01/2012, 14:12
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 1 mes
Puntos: 71
Respuesta: Nuevo en Java, Aproximación de valores.

Usa ROUND_CEILING y tendrá lo que necesita y para mayor referencia puedes revisar la documentación http://docs.oracle.com/javase/1.4.2/...igDecimal.html
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #3 (permalink)  
Antiguo 09/01/2012, 14:26
 
Fecha de Ingreso: agosto-2008
Mensajes: 198
Antigüedad: 15 años, 9 meses
Puntos: 27
Respuesta: Nuevo en Java, Aproximación de valores.

Según recuerdo, al menos en otros lenguajes de programación, el ceil redondea al valor más próximo siempre que haya un resto. Lo acabo de probar en Java y funciona igual. Para 2 decimales:
0.705 = 0.71
0.704 = 0.71
0.703 = 0.71
...
0.700 = 0.70

Eso no sirve, por que a mí me interesa que redondee los iguales o mayores a 0.705, no los inferiores a dicho número.

Saludos.
  #4 (permalink)  
Antiguo 10/01/2012, 08:18
 
Fecha de Ingreso: agosto-2008
Mensajes: 198
Antigüedad: 15 años, 9 meses
Puntos: 27
Respuesta: Nuevo en Java, Aproximación de valores.

Creo que ya lo tengo, debo declarar el valor entre comillas dobles:

Código:
BigDecimal valor = new BigDecimal("0.705");
Es decir, pasar al constructor un string, ya que si paso un número es interpretado como double, ahí se produce el error, antes de la conversión a BigDecimal.

Saludos.
  #5 (permalink)  
Antiguo 10/01/2012, 08:22
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 2 meses
Puntos: 78
Respuesta: Nuevo en Java, Aproximación de valores.

Interesante, gracias por compartir.
  #6 (permalink)  
Antiguo 10/01/2012, 08:26
 
Fecha de Ingreso: agosto-2008
Mensajes: 198
Antigüedad: 15 años, 9 meses
Puntos: 27
Respuesta: Nuevo en Java, Aproximación de valores.

Bueno, no es que lo haya descubierto solo , me lo dijeron, yo únicamente repetí la respuesta.

Etiquetas: jar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:12.