En algún lugar entre Java 11 y 17, el formato de moneda cambió a donde esto:
NumberFormat.getCurrencyInstance(Locale.CANADA_FRENCH).format(100.00) imprimiría 100,00 $ CA en lugar de 100,00 $ .
¿Hay una mejor manera que esta para eliminar el código de país CA ?
var currencyFormat = NumberFormat.getCurrencyInstance(Locale.CANADA_FRENCH); if (currencyFormat instanceof DecimalFormat decimalFormat) { var symbols = DecimalFormatSymbols.getInstance(Locale.CANADA_FRENCH); symbols.setCurrencySymbol("$"); decimalFormat.setDecimalFormatSymbols(symbols); }Parece demasiado solo para recuperar algo que era el comportamiento predeterminado hasta hace poco.
Investigué un poco en esto, los datos de configuración regional de JDK provienen de Unicode CLDR de forma predeterminada, y parece que revirtieron de $ CA a $ en agosto, vea CLDR-14862 y este compromiso (expandir common/main/fr_CA.xml y luego ir a las líneas 5914/5923).
Esto fue parte de v40, lanzado en octubre, demasiado tarde para JDK 17 cuyo documento dice que usa CLDR v35.1 (que se introdujo en Java 13 ) pero parece que se actualizó a v39 en abril de 2021 y olvidaron la nota de lanzamiento (Parece que JDK 16 ya se ha actualizado a v38 ).
CLDR v40 está planificado para JDK 19 .
Es posible que desee ejecutar su aplicación utilizando las configuraciones regionales COMPAT primero, con
-Djava.locale.providers=COMPAT,CLDR,SPI ( encontrado aquí pero ver también LocaleServiceProvider )
Esto utilizará las configuraciones regionales compatibles con Java 8, donde este problema no está presente.