2012-05-31 12 views
11

C'è un po 'di codice della forma follow che viene utilizzato per i valori numerici formato esistente:Java String.Format con il simbolo di valuta

String.format(pattern, value) 

Nota che non posso cambiare il codice stesso - posso solo cambia il modello di formato fornito al codice.

Qual è il modello di formato per l'output di un simbolo di valuta per le impostazioni locali predefinite? In sostanza, voglio ottenere il seguente risultato:

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

Forse vale la pena un'occhiata a [NumberFormat] (http://docs.oracle.com/javase/6/docs/api/java/text/NumberFormat.html#format (lungo)). –

+0

modificato per menzionare Non riesco a modificare il codice –

+0

@MarcPolizzi: non è possibile modificare il codice, ma è possibile * modificare * la stringa di formato (presumibilmente specificata altrove) - è giusto? –

risposta

4

Con i vincoli che hai dato, penso che sia impossibile raggiungerlo. Per ottenere il simbolo di valuta locale corrente, è necessario un minimo di codice.

Se non si dispone assolutamente di codice per aggiungere il codice al programma, è consigliabile utilizzare il simbolo stabilito per "currency" (¤). È stato stabilito per questo scopo preciso, per simboleggiare la valuta assente qualsiasi simbolo più specifico.

Se non è possibile modificare il codice specificato, ma aggiungere codice al progetto nel suo complesso, è possibile utilizzarlo per individuare il simbolo più utilizzato. Una volta che lo hai, puoi usarlo per creare un modello per il codice esistente da utilizzare per la formattazione.

Se è possibile scoprire in quale locale verrà eseguito il programma originale in seguito, è possibile scrivere un programma di assistenza che utilizza tale impostazione per completare la configurazione.

4

si può provare il seguente:

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 
} 

Questo stampa:

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

Sembra non stampare un simbolo EURO se il locale della mia JVM è francese; visualizza ancora $ –

+0

ohhh scusa. Pensavo volessi stampare $. –

11

c'è bisogno di reinventare la ruota. DecimalFormat viene fornito con supporto per la valuta:

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

Questo avviene anche con il pieno supporto locale da opzionalmente passando un Locale:

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

Ecco un test:

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

uscita:

$123.45 
123,45 € 
1

Se non sono disponibili impostazioni internazionali predefinite, è possibile procedere con l'impostazione del simbolo di valuta utilizzando la codifica unicode e decimale. Come nel seguente codice:

Ad es. Impostazione del simbolo di valuta indiano e formattazione del valore. Questo funzionerà senza che l'utente apporti modifiche nelle impostazioni.

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)); 

uscita:

₹12,324.13 
Problemi correlati