|
|
|
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 zhuangjiaju
|
|
|
|
*/
|
|
|
|
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())) {
|
|
|
|
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);
|
|
|
|
return decimalFormat.parse(string);
|
|
|
|
}
|
|
|
|
}
|