2011-11-18 26 views

Respuesta

14

Creo que tengo una manera. Nunca he utilizado esto, eso sí, pero sin duda debería conseguir cerrar, si no existe:

NumberFormat nf = NumberFormat.getInstance(); 
if (nf instanceof DecimalFormat) { 
    DecimalFormatSymbols sym = ((DecimalFormat) nf).getDecimalFormatSymbols(); 
    char decSeparator = sym.getDecimalSeparator(); 
} 

Docs:

NumberFormat, DecimalFormat, DecimalFormatSymbols

De acuerdo con los documentos DecimalFormat, Aparentemente llamar a NumberFormat.getInstance() es seguro, pero puede devolver una subclase que no sea DecimalFormat (la otra opción que veo es ChoiceFormat). Creo que para la mayoría de las instancias debería ser un DecimalFormat, y luego puedes comparar decSeparator con un , y . para ver qué formato está usando.

+0

Gracias esto funciona genial – patrick

+2

Necesitaba convertir 'nf' a' DecimalFormat' '((DecimalFormat) nf) .getDecimalFormatSymbols()', muchas gracias. –

+0

¡Gracias @ SelçukCihan, he editado la respuesta para incluir el elenco requerido! – kcoppock

-1

No estoy seguro de si hay una manera fácil, pero podría probar qué conjunto de idiomas se está utilizando y luego hacer los cambios apropiados según si ese idioma utilizó comas o decimales.

+0

separador de idioma y decimal son dos problemas diferentes. Además, es poco probable que enumere todo el idioma existente. – Loda

1

Yo probé esto y funcionó bien ...

String osVersion = System.getProperty("os.version"); 
String PhoneModel = android.os.Build.MODEL; 
String locale = this.getResources().getConfiguration().locale.getDisplayCountry(); 
char decSeparator = '*'; 
DecimalFormatSymbols dfs = new DecimalFormatSymbols(); 
decSeparator = dfs.getDecimalSeparator(); 
String androidVersion = android.os.Build.VERSION.RELEASE; 
String prologue = String.format("OS verson = %s PhoneModel = %s locale = %s DecimalFormatSymbol = [%c] androidVersion = %s ", 
     osVersion ,PhoneModel, locale, decSeparator,androidVersion); 
1

que puede utilizar:

Currency currency = Currency.getInstance(device_locale); 

de utilizar currency.getSymbol() para el símbolo. Para la configuración regional predeterminada del dispositivo puede usar:

@TargetApi(Build.VERSION_CODES.N) 
    public static Locale getCurrentLocale(Context c) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
      return c.getResources().getConfiguration().getLocales().get(0); 
     } else { 
      //noinspection deprecation 
      return c.getResources().getConfiguration().locale; 
     } 
    } 
Cuestiones relacionadas