2009-04-16 6 views
15

Tengo un valor almacenado en un DB que se correlaciona con una cantidad monetaria, digamos 10.0. También tengo acceso a la moneda/código de moneda. ¿Cómo puedo usar NumberFormat/DecimalFormat/(other?) Para formatear cuando no conozco la configuración regional? De acuerdo con los documentos, elegirá una configuración regional predeterminada que no funcionará con una moneda extranjera.Java: ¿es posible la asignación de moneda a la configuración regional?

Respuesta

15

El comportamiento correcto, en general, es formatear la cantidad en la configuración regional preferida del usuario, no en la configuración regional típica de la moneda. En el lado del cliente, tendrá la preferencia del usuario (Locale.getDefault()); Si está haciendo algo en el lado del servidor web, use Accept-Language o, preferiblemente, la configuración regional del contenido de la página para obtener una configuración regional adecuada.

El razonamiento es el siguiente: Un usuario Inglés-estadounidense entenderá € 10,000,000.15 pero no es el adecuado para la Alemania equivalente, € 10.000.000,15

La moneda en sí no contiene suficiente información para inferir una ubicación adecuada, de todos modos.

2

¿Qué pasa si el código de la moneda es EUR? Y, aunque le ha tomado una paliza, USD todavía se usa en todo el mundo. Inferir la configuración regional del código de moneda parece poco confiable. ¿Puede introducir una preferencia de usuario explícita para la configuración regional en su lugar?

La información que está buscando no es parte de la base de datos incorporada de moneda de Java, por lo que no hay una API para ella. Puede create your own table para los muchos casos que no son ambiguos.

0

Yo diría que si su base de datos está almacenando un valor de moneda, debería estar colgando en las unidades al mismo tiempo. Parece que estás haciendo eso ahora. ¿Puedes agregar la configuración regional a la base de datos al mismo tiempo? Podría ser una solución decente

23

JasonTrue es correcta, pero puede dar prioridad a la moneda de la configuración regional del NumberFormat:

NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale); 
//the user may have selected a different currency than the default for their locale 
Currency currency = Currency.getInstance("GBP"); 
numberFormat.setCurrency(currency); 
numberFormat.format(amount); 
0

Aquí está una manera de determinar la configuración regional del código de moneda

let locale = NSLocale(localeIdentifier: NSLocale.canonicalLocaleIdentifierFromString(NSLocale.localeIdentifierFromComponents([NSLocaleCurrencyCode: currencyCode]))) 

let formatter = NSNumberFormatter() 
formatter.numberStyle = .CurrencyStyle 
formatter.currencyCode = currencyCode 
formatter.locale = locale 
formatter.maximumFractionDigits = 2 
formatter.stringFromNumber(number) 
Cuestiones relacionadas