2014-10-08 11 views
5

Ho cercato di analizzare una stringa (-0,3) per un letto in Java usando locale svedese utilizzando questo codice:Java: qual è la differenza tra le impostazioni locali sv e sv_SE?

String DoubleString = "-0,3" 
NumberFormat swedishNumberFormat = NumberFormat.getInstance(new Locale("sv")); 
System.out.println(swedishNumberFormat.parse(doubleString).doubleValue()); 

Quando provai alla locale sv_SE il risultato era -3.0, che, ovviamente, non è corretto. Quindi, dopo un sacco di di mal di testa ha cambiato la locale in sv (come nell'esempio sopra) e quindi il risultato è corretto, -0,3.

Secondo http://www.localeplanet.com/java/sv/index.html e http://www.localeplanet.com/java/sv-SE/index.html il separatore decimale (Decimalavgränsare) in entrambi i casi è virgola (,) quindi perché questa differenza?

(ho provato ad aggiungerne con alcuni tag correlati in Svezia, come sv_SE ma non ho avuto abbastanza punti reputazione per aggiungere nuovi tag. Sentitevi liberi di aggiungere i tag, se potete.)

risposta

6

Se si tenta per creare Locale come new Locale("sv_SE"), quindi non riuscirà a farlo corrispondere tramite lo standard ISO 639 utilizzato per rilevare la lingua (sì se c'è un solo parametro è minacciato come lingua, consultare la documentazione). Nel tuo caso dovresti usare new Locale("sv","SE") per impostare correttamente il paese, altrimenti, poiché l'abbinamento per la lingua fallisce, viene usata la lingua predefinita (che nel tuo caso sembra essere inglese). In inglese, la virgola viene utilizzata per il raggruppamento di cifre e non come segno decimale, motivo per cui il risultato è inaspettato ma corretto.

Problemi correlati