package com.alibaba.excel.util; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; import java.text.ParseException; import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.property.ExcelContentProperty; /** * Number utils * * @author Jiaju Zhuang */ public class NumberUtils { private NumberUtils() {} /** * format * * @param num * @param contentProperty * @return */ public static String format(Number num, ExcelContentProperty contentProperty) { if (contentProperty == null || contentProperty.getNumberFormatProperty() == null || StringUtils.isEmpty(contentProperty.getNumberFormatProperty().getFormat())) { if (num instanceof BigDecimal) { return ((BigDecimal)num).toPlainString(); } else { return num.toString(); } } String format = contentProperty.getNumberFormatProperty().getFormat(); RoundingMode roundingMode = contentProperty.getNumberFormatProperty().getRoundingMode(); DecimalFormat decimalFormat = new DecimalFormat(format); decimalFormat.setRoundingMode(roundingMode); return decimalFormat.format(num); } /** * format * * @param num * @param contentProperty * @return */ public static CellData formatToCellData(Number num, ExcelContentProperty contentProperty) { return new CellData(format(num, contentProperty)); } /** * parse * * @param string * @param contentProperty * @return */ public static Short parseShort(String string, ExcelContentProperty contentProperty) throws ParseException { if (!hasFormat(contentProperty)) { return Short.valueOf(string); } return parse(string, contentProperty).shortValue(); } /** * parse * * @param string * @param contentProperty * @return */ public static Long parseLong(String string, ExcelContentProperty contentProperty) throws ParseException { if (!hasFormat(contentProperty)) { return Long.valueOf(string); } return parse(string, contentProperty).longValue(); } /** * parse * * @param string * @param contentProperty * @return */ public static Integer parseInteger(String string, ExcelContentProperty contentProperty) throws ParseException { if (!hasFormat(contentProperty)) { return Integer.valueOf(string); } return parse(string, contentProperty).intValue(); } /** * parse * * @param string * @param contentProperty * @return */ public static Float parseFloat(String string, ExcelContentProperty contentProperty) throws ParseException { if (!hasFormat(contentProperty)) { return Float.valueOf(string); } return parse(string, contentProperty).floatValue(); } /** * parse * * @param string * @param contentProperty * @return */ public static BigDecimal parseBigDecimal(String string, ExcelContentProperty contentProperty) throws ParseException { if (!hasFormat(contentProperty)) { return new BigDecimal(string); } return BigDecimal.valueOf(parse(string, contentProperty).doubleValue()); } /** * parse * * @param string * @param contentProperty * @return */ public static Byte parseByte(String string, ExcelContentProperty contentProperty) throws ParseException { if (!hasFormat(contentProperty)) { return Byte.valueOf(string); } return parse(string, contentProperty).byteValue(); } /** * parse * * @param string * @param contentProperty * @return */ public static Double parseDouble(String string, ExcelContentProperty contentProperty) throws ParseException { if (!hasFormat(contentProperty)) { return Double.valueOf(string); } return parse(string, contentProperty).doubleValue(); } private static boolean hasFormat(ExcelContentProperty contentProperty) { return contentProperty != null && contentProperty.getNumberFormatProperty() != null && !StringUtils.isEmpty(contentProperty.getNumberFormatProperty().getFormat()); } /** * parse * * @param string * @param contentProperty * @return * @throws ParseException */ private static Number parse(String string, ExcelContentProperty contentProperty) throws ParseException { String format = contentProperty.getNumberFormatProperty().getFormat(); RoundingMode roundingMode = contentProperty.getNumberFormatProperty().getRoundingMode(); DecimalFormat decimalFormat = new DecimalFormat(format); decimalFormat.setRoundingMode(roundingMode); decimalFormat.setParseBigDecimal(true); return decimalFormat.parse(string); } }