diff options
Diffstat (limited to 'poi')
-rw-r--r-- | poi/src/main/java/org/apache/poi/ss/formula/functions/NumericFunction.java | 6 | ||||
-rw-r--r-- | poi/src/test/java/org/apache/poi/ss/usermodel/TestExcelStyleDateFormatter.java | 24 |
2 files changed, 25 insertions, 5 deletions
diff --git a/poi/src/main/java/org/apache/poi/ss/formula/functions/NumericFunction.java b/poi/src/main/java/org/apache/poi/ss/formula/functions/NumericFunction.java index bc0ccfe482..a0baba1e13 100644 --- a/poi/src/main/java/org/apache/poi/ss/formula/functions/NumericFunction.java +++ b/poi/src/main/java/org/apache/poi/ss/formula/functions/NumericFunction.java @@ -106,7 +106,11 @@ public abstract class NumericFunction implements Function { DecimalFormat nf = (DecimalFormat) NumberFormat.getCurrencyInstance(LocaleUtil.getUserLocale()); int decimalPlaces = Math.max(nPlaces, 0); if (LocaleUtil.getUserLocale().getCountry().equalsIgnoreCase("US")) { - nf.setNegativePrefix("(" + nf.getDecimalFormatSymbols().getCurrencySymbol()); + // Java 23 removed "COMPAT" locale provider and thus + // we need to ensure that the dollar-sign is used and not "USD" as Java 23 and newer + // would do + nf.setPositivePrefix("$"); + nf.setNegativePrefix("($"); nf.setNegativeSuffix(")"); } nf.setMinimumFractionDigits(decimalPlaces); diff --git a/poi/src/test/java/org/apache/poi/ss/usermodel/TestExcelStyleDateFormatter.java b/poi/src/test/java/org/apache/poi/ss/usermodel/TestExcelStyleDateFormatter.java index 0588c75a77..b3ccd06a4c 100644 --- a/poi/src/test/java/org/apache/poi/ss/usermodel/TestExcelStyleDateFormatter.java +++ b/poi/src/test/java/org/apache/poi/ss/usermodel/TestExcelStyleDateFormatter.java @@ -73,10 +73,26 @@ class TestExcelStyleDateFormatter { * is expected and selected via an index */ private static int localeIndex(Locale locale) { - return jreVersion < 9 || - !locale.equals (Locale.CHINESE) || - (provider != null && (provider.startsWith("JRE") || provider.startsWith("COMPAT"))) - ? 0 : 1; + if (jreVersion < 9) { + return 0; + } + + // only Chinese needs special handling + if (!locale.equals (Locale.CHINESE)) { + return 0; + } + + // in JDK 23, the COMPAT/JRE provider was removed completely + if (jreVersion >= 23) { + return 1; + } + + // check if the JRE/COMPAT locale provide is selected + if (provider != null && (provider.startsWith("JRE") || provider.startsWith("COMPAT"))) { + return 0; + } + + return 1; } /** |