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 €