aboutsummaryrefslogtreecommitdiffstats
path: root/poi
diff options
context:
space:
mode:
Diffstat (limited to 'poi')
-rw-r--r--poi/src/main/java/org/apache/poi/ss/formula/functions/NumericFunction.java6
-rw-r--r--poi/src/test/java/org/apache/poi/ss/usermodel/TestExcelStyleDateFormatter.java24
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;
}
/**