From: PJ Fanning Date: Thu, 14 Apr 2022 17:01:51 +0000 (+0000) Subject: try to standardise big decimal code X-Git-Tag: REL_5_2_3~355 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=31cce15e224b1b2df9cd1b4ed4aac17e3976f303;p=poi.git try to standardise big decimal code git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1899864 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/poi/src/main/java/org/apache/poi/ss/usermodel/FractionFormat.java b/poi/src/main/java/org/apache/poi/ss/usermodel/FractionFormat.java index 3e528f986a..f5ffd91faf 100644 --- a/poi/src/main/java/org/apache/poi/ss/usermodel/FractionFormat.java +++ b/poi/src/main/java/org/apache/poi/ss/usermodel/FractionFormat.java @@ -106,12 +106,21 @@ public class FractionFormat extends Format { @SuppressWarnings("squid:S2111") public String format(Number num) { + final double d = num.doubleValue();; + try { + //this is the recommended way (in BigDecimal javadocs to create a decimal from a double) + return format(new BigDecimal(Double.toString(d))); + } catch (NumberFormatException nfe) { + //Double.toString can fail + return format(d); + } + } - final BigDecimal doubleValue = new BigDecimal(num.doubleValue()); - - final boolean isNeg = doubleValue.compareTo(BigDecimal.ZERO) < 0; + @SuppressWarnings("squid:S2111") + private String format(final BigDecimal decimal) { + final boolean isNeg = decimal.compareTo(BigDecimal.ZERO) < 0; - final BigDecimal absValue = doubleValue.abs(); + final BigDecimal absValue = decimal.abs(); final BigDecimal wholePart = new BigDecimal(absValue.toBigInteger()); final BigDecimal decPart = absValue.remainder(BigDecimal.ONE); @@ -148,7 +157,7 @@ public class FractionFormat extends Format { } } catch (RuntimeException e){ LOGGER.atWarn().withThrowable(e).log("Can't format fraction"); - return Double.toString(doubleValue.doubleValue()); + return Double.toString(decimal.doubleValue()); } StringBuilder sb = new StringBuilder(); @@ -184,10 +193,12 @@ public class FractionFormat extends Format { return sb.toString(); } + @Override public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos) { return toAppendTo.append(format((Number)obj)); } + @Override public Object parseObject(String source, ParsePosition pos) { throw new NotImplementedException("Reverse parsing not supported"); }