import java.math.BigDecimal;
import java.text.DecimalFormat;
/**
* ClassName: NumUtil<br/>
* Description: <br/>
* date: 2018/8/31 下午4:18<br/>
*
* @author chengluchao
* @since JDK 1.8
*/
public abstract class NumUtil {
static final String FORMAT2STR = "0.00";
static final String FORMAT8STR = "0.00000000";
static final DecimalFormat df2 = new DecimalFormat(FORMAT2STR);
static final DecimalFormat df8 = new DecimalFormat(FORMAT8STR);
/**
* 格式化小数
*
* @param num
* @return
*/
public static BigDecimal parseDouble(String num) {
if (StrUtils.isEmpty(num))
return new BigDecimal(0.0);
return new BigDecimal(num);
}
/**
* 格式化小数,可以为空
*
* @param num
* @return
*/
public static BigDecimal parseDoubleHaveNull(String num) {
if (StrUtils.isEmpty(num))
return null;
return new BigDecimal(num);
}
/**
* 格式化小数-double
*
* @param num
* @return
*/
public static double parseDoubleTrue(String num) {
if (StrUtils.isEmpty(num))
return 0.0;
return Double.parseDouble(num);
}
/**
* 转小数,保留2位
*
* @param num
* @return
*/
public static BigDecimal StrTo2Double(String num) {
if (StrUtils.isEmpty(num))
num = FORMAT2STR;
return new BigDecimal(num).setScale(2, java.math.BigDecimal.ROUND_HALF_UP);
}
/**
* 转小数,保留3位
*
* @param num
* @return
*/
public static BigDecimal StrTo3Double(String num) {
if (StrUtils.isEmpty(num))
num = "0.000";
return new BigDecimal(num).setScale(3, java.math.BigDecimal.ROUND_HALF_UP);
}
/**
* 转小数,保留8位
*
* @param num
* @return
*/
public static BigDecimal StrTo8Double(String num) {
if (StrUtils.isEmpty(num))
num = FORMAT8STR;
return new BigDecimal(num).setScale(8, java.math.BigDecimal.ROUND_HALF_UP);
}
/**
* 格式化数字
*
* @param num
* @return
*/
public static int parseInt(String num) {
if (StrUtils.isEmpty(num))
return 0;
return Integer.parseInt(num);
}
/**
* 格式化8位小数
*
* @param num
* @return
*/
@Deprecated
public static String format8(Double num) {
if (num == null)
num = 0.00000000;
return df8.format(num);
}
/**
* 格式化8位小数
*
* @param num
* @return
*/
@Deprecated
public static String format8Double(String num) {
if (num == null)
return FORMAT8STR;
return df8.format(Double.parseDouble(num));
}
/**
* 格式化8位小数
*
* @param num
* @return
*/
public static String format8(String num) {
if (StrUtils.isEmpty(num))
return FORMAT8STR;
BigDecimal bigDecimal = new BigDecimal(num);
/* if ((0 > bigDecimal.compareTo(new BigDecimal("1"))) && (0 < bigDecimal.compareTo(new BigDecimal("-1")))){
return format8Double(num);
} else {
return format8(bigDecimal);
}*/
return format8(bigDecimal);
}
/**
* 格式化2位小数
*
* @param num
* @return
*/
public static String format2(String num) {
if (StrUtils.isEmpty(num))
num = FORMAT2STR;
return format2(new BigDecimal(num));
}
/**
* 格式化2位小数
*
* @param num
* @return
*/
@Deprecated
public static String format2(Double num) {
if (num == null || num == 0.0)
num = 0.00;
if (num == 0.015)
num = 0.02;
return df2.format(num);
}
/**
* 格式化2位小数
*
* @param num
* @return
*/
public static String format2(BigDecimal num) {
if (num == null)
return FORMAT2STR;
return num.setScale(2, java.math.BigDecimal.ROUND_HALF_UP).toPlainString();
}
/**
* 格式化2位小数
*
* @param num
* @return
*/
public static BigDecimal format2BigDecimal(BigDecimal num) {
if (num == null)
return new BigDecimal("0.00");
return num.setScale(2, java.math.BigDecimal.ROUND_HALF_UP);
}
/**
* 格式化8位小数
*
* @param num
* @return
*/
public static String format8(BigDecimal num) {
if (num == null)
return FORMAT8STR;
return num.setScale(8, java.math.BigDecimal.ROUND_HALF_UP).toPlainString();
}
/**
* 是否比0大
* num > 0
*
* @return
*/
public static boolean biggerThan0(BigDecimal num) {
if (num == null)
return false;
if (0 < num.compareTo(new BigDecimal(0)))
return true;
return false;
}
/**
* 参数是否为null,为null时直接返回。部位null时做绝对值
*
* @param val
* @return
* @author wuqingyu
*/
public static BigDecimal bigDecimalIsNull(BigDecimal val) {
if (val != null) {
val = val.abs();
} else {
val = null;
}
return val;
}
}