2010-12-29 33 views
25

Vivo en Bélgica. Y en general, en matemáticas, escribimos nuestros decimales con una coma como esta: 3,141592
Y ese también es el resultado cuando el formato I float.Java: el formato de flotación depende de la configuración regional

System.out.println(String.format("%f", 3.141592)); 

Así, el . se sustituye por un , así: 3,141592. Entonces, siempre que necesito un punto, tengo que agregar algo como esto: String.format("%f", 3.14).replace(',','.');

Entonces, la pregunta es: ¿hay alguna manera de cambiar la configuración regional que hace que cada formateador en Java use un punto, en lugar de coma?

Gracias


System.out.println(Locale.getDefault()); 

grabados

nl_BE 
+0

¿Desea cambiar únicamente el formato del número o está bien si todo lo demás cambia a, por ejemplo, la configuración regional de EE. UU. También? – Thilo

+0

Interesante Quiero ver eso, ¿cuál es tu defaultLocale? –

+0

@Thilo: si es posible: solo el formato del número. –

Respuesta

42

Intente utilizar String.format(Locale.US, "%f", floatValue) para simplemente configurar la configuración regional utilizada durante el formateo.

9

Una solución sencilla, pero podrían ser de amplio alcance en toda la configuración regional, sería la de establecer la configuración regional del sistema de los Estados Unidos o el Reino Unido. Ejemplo.

Locale.setDefault(Locale.US); 

Dado que ha cambiado la pregunta, simplemente debe especificar el local con su método de impresión.

System.out.println(String.format(Locale.US, "%f", 3.141592)); 
+2

El problema con esto es que obtienes la coma como separador de miles, y se vuelve muy confuso para los usuarios franceses o belgas. Nuestro TouhsandsSeparador es espacio, y la coma es nuestro separador decimal. – LaGrandMere

+3

Como alternativa, use 'String.format (Locale.US,"% f ", floatValue)' solo para configurar la configuración regional utilizada durante el formateo. – rodion

+0

@rodion: ¿Puedes agregar tu respuesta como una respuesta real? –

1

Para los números de formato, que realmente no debería depender de toString(). Use String.format(), los métodos de fábrica en NumberFormat, o DecimalFormat, que le permiten controlar cómo se formatearán los números (los dos primeros al elegir una configuración regional) sin depender de alguna configuración global.

+3

toString es confiablemente independiente de la configuración regional. – Thilo

7

Puede ser útil mirar http://download.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html que contiene una serie de opciones para la salida precisa de cadenas utilizando configuración regional cuando sea necesario

DecimalFormat es una subclase concreta de NumberFormat que da formato decimal números. Tiene una variedad de características diseñadas para hacer posible analizar y dar formato a los números en cualquier localidad, incluyendo soporte para Western, Arabic, y dígitos índicos. También admite diferentes tipos de números, incluidos enteros (123), números de punto fijo (123.4), notación científica (1.23E4), porcentajes (12%) y montos de moneda ($ 123). Todos estos pueden ser localizados.

A menudo es útil enrutar la entrada y salida a través de rutinas a medida. Aquí está uno de la biblioteca JAMA (http://math.nist.gov/javanumerics/jama/)

public void print (PrintWriter output, int w, int d) { 
     DecimalFormat format = new DecimalFormat(); 
     format.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US)); 
     format.setMinimumIntegerDigits(1); 
     format.setMaximumFractionDigits(d); 
     format.setMinimumFractionDigits(d); 
     format.setGroupingUsed(false); 
     print(output,format,w+2); 
    } 

Mediante el uso de este, puede estar seguro de que los futuros problemas y mejoras son susceptibles de ser abordado

Cuestiones relacionadas