Uso de DecimalFormat

Kirlian
02 de Marzo del 2010
Hola a todos!!!

Tengo un pequeño problemilla con una aplicación de Javaque he tenido que desarrollar. La aplicacion es muy simple y lo que hace es leer un archivo .txt externo con varias cifras y sacar la media y la desviación estandar de esos números. El programa funciona perfectamente excepto por una tontería que no soy capaz de hacer funcionar.

El programa muestra como resultado varios numeros en formato Double y necesito que me redondee los decimales a dos cifras, pero por mas que intento utilizar DecilmalFormat no me hace ccaso, y me muestra todas las cifras del numero.

Si alguien me puede decir en que falla le estaría muy agradecido.

Os copio el codigo y un saludo!!!


import java.io.*;
import java.text.DecimalFormat;
import java.util.ArrayList;
class Exercise03
{

public static void main(String arg[ ]) throws IOException
{
ArrayList<Double> lista = new ArrayList<Double>();
try {
FileReader file = new
FileReader("read.txt");
BufferedReader buff = new
BufferedReader(file);
boolean eof = false;
while (!eof) {
String line = buff.readLine();
if (line == null) eof = true;
else{
line = line.split(";")[0];

Double d = new Double(Double.parseDouble(line)); //Se crea un objeto de tipo Double, que contiene el número indicado en el fichero "read.txt"
lista.add(d); //y se añade a la lista

}
}
buff.close();
} catch (IOException e) {
System.out.println("Error -- " +e.toString());
}

Object numbers[] = lista.toArray();

DecimalFormat df = new DecimalFormat();
df.applyPattern("#,##0.00");

df.format(0.00);

System.out.println("n Results n");

double aux_media = media(numbers);
System.out.println(" Mean : " + aux_media);

double aux_var = varianza(numbers,aux_media);
System.out.println(" Standar Deviation : " + Math.sqrt(aux_var));
}



public static double media(Object arr[ ]) //Se le pasa como argumento un array que contiene referencias a Objetos (y que ya estamos seguros que son Objetos de tipo Double.
{
double sum = 0.0;

for(int i = 0; i < arr.length ; i++)
{
sum += ((Double)arr[i]).doubleValue(); //Se usa este método de la clase Double para obtener el valor encapsulado por el objeto de tipo Double. Para ello es necesario hacer un casting a (Double) ya que con esto indicas que un Objeto cualquiera va a ser tratado como un Double.
}

return sum / arr.length;
}

public static double varianza(Object arr[ ], double media) //Lo mismo con esta función
{
double sum = 0.0;

for(int i = 0; i < arr.length ; i++)
{
sum += Math.pow((((Double)arr[i]).doubleValue()) - media, 2); //idem
}

return sum / (arr.length); // array.length devuelve el número de elementos del array.
}

}



Muchas gracias por adelantado

silverfox
02 de Marzo del 2010
He probado este código y parece que funciona:

double dob = 1.126;
double resultado;
BigDecimal res;

res = new BigDecimal(dob).setScale(2, BigDecimal.ROUND_HALF_EVEN);
resultado = res.doubleValue();
System.out.println(dob);
System.out.println(resultado);


Saludos,

silverfox
02 de Marzo del 2010
Y esto de aquí también tira:

double dob2 = 1.124;
DecimalFormat formateador = new DecimalFormat("#.00");
System.out.println (formateador.format(dob2));