Uso de DecimalFormat
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
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
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,
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,
