2012-05-31 131 views
11

hay algo de código de la forma de seguimiento que se utiliza para los valores numéricos de formato existente:Java String.Format con el símbolo de moneda

String.format(pattern, value) 

Nota que no puedo cambiar el código en sí - sólo puedo cambie el patrón de formato proporcionado al código.

¿Cuál es el patrón de formato para generar un símbolo de moneda para la configuración regional predeterminada? En esencia, quiero alcanzar el siguiente resultado:

String.format("...", 123) => $ 123 
+0

Quizás vale la pena ver [NumberFormat] (http://docs.oracle.com/javase/6/docs/api/java/text/NumberFormat.html#format (largo)). –

+0

editado para mencionar que no puedo cambiar el código –

+0

@MarcPolizzi: no puede cambiar el código, pero * puede * cambiar la cadena de formato (presumiblemente especificada en otro lugar) - ¿es así? –

Respuesta

4

Con las limitaciones que ha otorgado, creo que es imposible lograrlo. Para llegar al símbolo de moneda de Locale actual, necesitará un mínimo de código.

Si no tiene absolutamente ningún medio para agregar código al programa, es mejor utilizar el símbolo establecido para "currency" (¤). Fue establecido para este propósito exacto, para simbolizar la moneda sin ningún símbolo más específico.

Si no puede cambiar el código dado, pero puede agregar el código al proyecto como un todo, puede usarlo para encontrar el símbolo que mejor se usa. Una vez que lo tenga, puede usarlo para crear un patrón para el código existente para usarlo en el formateo.

Si puede averiguar en qué configuración regional se ejecutará el programa original a continuación, podría escribir un programa de asistente que use esa configuración para completar su configuración.

4

Usted puede intentar lo siguiente:

public static void main(String[] args) { 
    System.out.println(String.format(" %d \u20AC", 123)); // %d for integer 
    System.out.println(String.format(" %.2f \u20AC", 123.10)); // %f for floats 
} 

Esta impresora:

123 € 
123.10 € 
-2
String formatstring=String.format("$%s", 123); 
    System.out.println(formatstring); 
+0

No parece imprimir un símbolo EURO si el local de mi JVM es francés; todavía muestra $ –

+0

ohhh lo siento. Pensé que quieres imprimir $. –

11

hay necesidad de reinventar la rueda. DecimalFormat viene con soporte de moneda:

String output = DecimalFormat.getCurrencyInstance().format(123.45); 

Esto también viene con el soporte del local completo por opcionalmente pasando un Locale:

String output = DecimalFormat.getCurrencyInstance(Locale.GERMANY).format(123.45); 

Así es una prueba:

System.out.println(DecimalFormat.getCurrencyInstance().format(123.45)); 
System.out.println(DecimalFormat.getCurrencyInstance(Locale.GERMANY).format(123.45)) ; 

de salida:

$123.45 
123,45 € 
1

Si no hay una Configuración regional predeterminada disponible, podemos configurar el símbolo de moneda mediante formato unicode y decimal. Como en el siguiente código:

Por ej. Establecer el símbolo de moneda india y formatear el valor. Esto funcionará sin que el usuario realice cambios en la configuración.

Locale locale = new Locale("en","IN"); 
DecimalFormat decimalFormat = (DecimalFormat) DecimalFormat.getCurrencyInstance(locale); 
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(locale); 
dfs.setCurrencySymbol("\u20B9"); 
decimalFormat.setDecimalFormatSymbols(dfs); 
System.out.println(decimalFormat.format(12324.13)); 

Salida:

₹12,324.13 
Cuestiones relacionadas