package com.trafficaudit.holiday;
|
|
import org.apache.poi.ss.util.NumberToTextConverter;
|
|
import java.math.BigDecimal;
|
import java.math.MathContext;
|
import java.math.RoundingMode;
|
|
public final class HolidayNumberUtils {
|
|
public static final MathContext EXCEL_MC = new MathContext(15, RoundingMode.HALF_UP);
|
public static final BigDecimal ZERO = BigDecimal.ZERO;
|
|
private HolidayNumberUtils() {
|
}
|
|
public static BigDecimal excelValue(double value) {
|
return normalize(new BigDecimal(NumberToTextConverter.toText(value)));
|
}
|
|
public static BigDecimal decimalValue(Object value) {
|
if (value == null || value.toString().trim().isEmpty()) return null;
|
return normalize(new BigDecimal(value.toString().trim()));
|
}
|
|
public static BigDecimal normalize(BigDecimal value) {
|
if (value == null) return null;
|
BigDecimal rounded = value.round(EXCEL_MC);
|
return rounded.signum() == 0 ? ZERO : rounded.stripTrailingZeros();
|
}
|
|
public static BigDecimal valueOrZero(BigDecimal value) {
|
return value == null ? ZERO : value;
|
}
|
|
public static BigDecimal sumNullable(BigDecimal left, BigDecimal right) {
|
if (left == null && right == null) return null;
|
return normalize(valueOrZero(left).add(valueOrZero(right)));
|
}
|
|
public static BigDecimal multiply(BigDecimal left, BigDecimal right) {
|
if (left == null || right == null) return null;
|
return normalize(left.multiply(right));
|
}
|
|
public static BigDecimal divide(BigDecimal dividend, BigDecimal divisor) {
|
if (dividend == null || divisor == null || divisor.signum() == 0) return null;
|
return normalize(dividend.divide(divisor, EXCEL_MC));
|
}
|
|
public static boolean sameValue(BigDecimal left, BigDecimal right) {
|
if (left == null || right == null) return false;
|
return normalize(left).compareTo(normalize(right)) == 0;
|
}
|
|
public static String changeText(BigDecimal value) {
|
if (value == null) return "";
|
return normalize(value).toPlainString();
|
}
|
|
public static String format1(BigDecimal value) {
|
if (value == null) return "";
|
return value.setScale(1, RoundingMode.HALF_UP).toPlainString();
|
}
|
|
public static String format2(BigDecimal value) {
|
if (value == null) return "";
|
return value.setScale(2, RoundingMode.HALF_UP).toPlainString();
|
}
|
}
|