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

[SOLUCIONADO] Limitar el número de decimales en un float

Estas en el tema de Limitar el número de decimales en un float en el foro de Java en Foros del Web. Hola, Estoy interesado en saber como limitar el número de decimales en un float por que creo que tal y como lo estoy haciendo no ...
  #1 (permalink)  
Antiguo 11/08/2012, 05:26
Avatar de fpalomar  
Fecha de Ingreso: noviembre-2003
Mensajes: 123
Antigüedad: 21 años
Puntos: 3
Limitar el número de decimales en un float

Hola,

Estoy interesado en saber como limitar el número de decimales en un float por que creo que tal y como lo estoy haciendo no es correcto.

A continuación pongo el código:

Código:
public float getAverage (List<Integer> pointsList){
	/* patron de formateo de dos decimales */

	NumberFormat nf = NumberFormat.getInstance();		
        nf.setMaximumFractionDigits(2);
		
	float total=0;
	float calc=0;
	for(Iterator<Integer> iter=pointsList.iterator();iter.hasNext();){
		calc = calc + iter.next();
	}
	total = (calc/pointsList.size()); 
				
	String x = (nf.format(total));
	total = Float.parseFloat(x);
				
	return total;
}
Como vereís el método recibe un List de puntuaciones y devuelve la media.
Al ejecutarlo se ve por pantalla que hace una "conversión" del punto decimal a
la coma, no se si eso esta implícito en el uso de Numberformat.

Como el String x recibe una coma en lugar del punto decimal al hacer el
Float.parseFloat(x) me da el error :

Exception in thread "main" java.lang.NumberFormatException: For input string: "8,83"
at sun.misc.FloatingDecimal.readJavaFormatString(Unkn own Source)
at java.lang.Float.parseFloat(Unknown Source)

at Exercici_3.Competition.getAverage(Competition.java:62)
at Exercici_3.Competition.main(Competition.java:29)

Saludos
  #2 (permalink)  
Antiguo 11/08/2012, 07:06
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Limitar el número de decimales en un float

Hola:

Float.parseFloat() usa el punto como separador decimal, así que puedes cambiarlo en el String antes de intentar usar parseFloat : x.replaceAll(",",".") y así no tendrás problemas.

Otra opción es que NumberFormat usa como separador de decimales (y de miles) el propio del idioma en el que esté tu sistema operativo. Así que basta usar NumberFormat tanto en un sentido (de float a String), como en el contrario (de String a float). nf.parse(x).floatValue(). Esto no debería darte problemas.

En cualquier caso, es mejor dejar que el float tenga todos los decimales que quiera y limitarlos sólo a la hora de escribir en pantalla. Si limitas el float, por ejemplo a que tenga 0.12, quizás al sacarlo por pantalla con un System.out se "empeñe" en sacártelo como 0.1199999999 o 0.120000001 (cosas de los float). Ahí sí, usa el NumberFormat pero sólo para formatear la salida en pantalla, o echa un ojo a System.out.printf(), que admite formatos como C/C++ y con algo como System.out.printf("%5.2f", unFloat) tendrás un float de 5 cifras con 2 decimales.

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: float, limitar, string
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 13:59.