2011-03-08 21 views
74

Actualmente utilizo el siguiente código para imprimir un doble: mientraspunto de Fuerza ("") como separador decimal en java

return String.format("%.2f", someDouble); 

Esto funciona bien, excepto que Java utiliza el separador decimal de mi configuración regional (una coma) Me gustaría usar un punto. ¿Hay una forma fácil de hacer esto?

+0

Si necesita usar el valor doble con decimales exactos, tal vez deberías usar BigDecimal en lugar de double/Double. Consulte este [enlace] (http://stackoverflow.com/questions/15625556/java-adding-and-subtracting-doubles-are-giving-strange-results) para conocer los problemas que puede encontrar al usar variables dobles. También puede intentar esto: System.out.println (5.1d + 1.1d); - el resultado será 6.199999999999999 en vez de 6.2. Creo que alguien que busque cómo formatear números con decimales como String debe omitir las variables dobles. – razvanone

Respuesta

136

Utilice la sobrecarga de String.format que le permite especificar la configuración regional:

return String.format(Locale.ROOT, "%.2f", someDouble); 

Si eres única dar formato a un número - como usted está aquí - a continuación, utilizando NumberFormat probablemente sería más apropiado. Pero si necesita el resto de las capacidades de formato de String.format, esto debería funcionar bien.

+4

Locale.ROOT es más neutral. – speedogoo

+0

@speedogoo: Editado, aunque sospecho que para formatear los números no hace ninguna diferencia. –

+1

Sí, pero no es necesario que elija entre EE. UU. Y el Reino Unido. – speedogoo

0

Puede usar NumberFormat y DecimalFormat.

Tome un vistazo a este enlace desde tutoriales de Java LocaleSpecific Formatting

La sección titulada sensible a la localidad formateo es lo que necesita.

9

Puede pasar un Locale adicional para java.lang.String.format así como a java.io.PrintStream.printf (por ejemplo System.out.printf()):

import java.util.Locale; 

public class PrintfLocales { 

    public static void main(String args[]) { 
     System.out.printf("%.2f: Default locale\n", 3.1415926535); 
     System.out.printf(Locale.GERMANY, "%.2f: Germany locale\n", 3.1415926535); 
     System.out.printf(Locale.US, "%.2f: US locale\n", 3.1415926535); 
    } 

} 

Esto da lugar a el siguiente (en mi PC):

$ java PrintfLocales 
3.14: Default locale 
3,14: Germany locale 
3.14: US locale 

Ver String.format en la API de Java.

+4

También puede usar 'out.printf ((Locale) null, ...)' o 'out.format ((Locale) null, ...)' para obtener una representación independiente de la configuración regional. (y también hay ['Locale.ROOT'] (http://docs.oracle.com/javase/6/docs/api/java/util/Locale.html#ROOT)) – eckes

18

Una solución más drástica es establecer su configuración regional al principio de main().

igual:

Locale.setDefault(new Locale("en", "US")); 
+6

Esta es una respuesta muy problemática, porque tiene un efecto global, por lo tanto puede causar muchos otros cambios (posiblemente indeseables). – sleske

4

demasiado tarde, sino como otra mencionado aquí es un ejemplo de uso NumberFormat (y de su subclase DecimalFormat)

public static String format(double num) { 
    DecimalFormatSymbols decimalSymbols = DecimalFormatSymbols.getInstance(); 
    decimalSymbols.setDecimalSeparator('.'); 
    return new DecimalFormat("0.00", decimalSymbols).format(num); 
} 
Cuestiones relacionadas