0

estoy intentando hacer un ejercicio de clase, en el cual tengo que rendondear, y que me de separación de miles y decimal,esto es lo que tengo:

ValorCatastral = 35200000.873333333d;
System.out.println("Valor Catastral del edificio: " + Math.floor(ValorCatastral) + "€");

El resultado tendría que ser este : 35.200.000,87 €

Pero a mi me da esto: 3.52E7€

¿Alguna solución?

Gracias de antemano

  • Alomejor esto te sirve: [formato cientifico](https://es.stackoverflow.com/questions/114228/java-formato-cient%C3%ADfico-al-convertir-string-a-double) – DevCodeG Oct 19 '18 at 11:06
  • ¿Estás seguro de que es así como lo tienes que hacer? Vale que los ejercicios a veces no son realistas, pero NUNCA se deberían usar valores de punto flotante para importes (https://es.stackoverflow.com/questions/197/por-qu%c3%a9-mis-programas-no-pueden-hacer-c%c3%a1lculos-aritm%c3%a9ticos-correctamente/153451#153451). En todo caso lo que ves es el número usando notación científica. – SJuan76 Oct 19 '18 at 11:07
  • 1
    En todo caso https://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html – SJuan76 Oct 19 '18 at 11:19

1 Answers1

1

Utilizando java.text.DecimalFormat, y estableciendo el patrón adecuado, en el código pongo 2 ejemplos el primero con el formato y sin java.util.Locale como parámetro, por lo que toma el del sistema que en mi caso es Locale("es","MX"), y el segundo el Locale Alemán, en donde los separadores se invierten:

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;

public class Test {

    public static void main(String[] args) {

        String pattern = "###,###,###.## €";
        double value = 35200000.873333333d;

        //Si no le paso ningun Locale, toma el del sistema, que en mi caso es Locale("es","MX");
        DecimalFormat myFormatter = new DecimalFormat(pattern);
        String output = myFormatter.format(value);
        System.out.println(value + " " + pattern + " " + output);

        //Aquí se le pasa el Locale de Alemania
        myFormatter = new DecimalFormat(pattern,DecimalFormatSymbols.getInstance(Locale.GERMANY));
        output = myFormatter.format(value);
        System.out.println(value + " " + pattern + " " + output);
    }

}   

El resultado es el siguiente:

3.5200000873333335E7 ###,###,###.## € 35,200,000.87 €

3.5200000873333335E7 ###,###,###.## € 35.200.000,87 €

Darth Vader
  • 845
  • 1
  • 8
  • 13