mirror of https://github.com/alibaba/easyexcel
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
4.9 KiB
172 lines
4.9 KiB
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); |
|
return decimalFormat.parse(string); |
|
} |
|
}
|
|
|