加、减、乘、除、四舍五入、格式化数字
/*
* setScale(2, roundMode); 如2.355655
* ROUND_CEILING
* ROUND_DOWN 2.35
* ROUND_FLOOR
* ROUND_HALF_DOWN 2.35
* ROUND_HALF_EVEN
* ROUND_HALF_UP 四舍五入 2.36
* ROUND_UNNECESSARY 2.355655
* ROUND_UP 进位 2.36
*/
public class NumberUtils {
/**
* 加
*/
public static String addNumber(Object number1, Object number2) {
String result = new BigDecimal(number1 + "")
.add(new BigDecimal(number2 + ""))
.toPlainString();
return removeZeroAfterDot(result);
}
/**
* 减
*/
public static String subtractNumber(Object number1, Object number2) {
String result = new BigDecimal(number1 + "")
.subtract(new BigDecimal(number2 + ""))
.toPlainString();
return removeZeroAfterDot(result);
}
/**
* 乘
*/
public static String multiplyNumber(Object number1, Object number2) {
String result = new BigDecimal(number1 + "")
.multiply(new BigDecimal(number2 + ""))
.toPlainString();
return removeZeroAfterDot(result);
}
/**
* 除
* @param scale BigDecimal.
*/
public static String divideNumber(Object number1, Object number2, int scale) throws IllegalAccessException {
if (scale < 0) {
throw new IllegalAccessException("精确度不能小于0");
}
String result = new BigDecimal(number1 + "")
.divide(new BigDecimal(number2 + ""), BigDecimal.ROUND_HALF_UP)
.toPlainString();
return removeZeroAfterDot(result);
}
/**
* 去掉小数点后的0
*/
public static String removeZeroAfterDot(Object s) {
if (s.toString().indexOf(".") > 0) {
s = s.toString().replaceAll("0+?$", ""); //去掉后面无用的零
s = s.toString().replaceAll("[.]$", ""); //如小数点后面全是零则去掉小数点
}
return s.toString();
}
/**
* 格式化显示小数点后的0的个数
* @param number 数字
* @param count 小数的个数
*/
public static String formatNumber(Object number, int count) {
if (TextUtils.isEmpty(number + "")) {
return "0";
}
StringBuilder sb = new StringBuilder();
if (count == 0) {
sb.append("0");
} else {
sb.append("0.");
for (int i = 0; i < count; i++) {
sb.append(0);
}
}
return roundNumber(number, sb.toString());
}
/**
* 四舍五入取小数格式
* @param number
* @param pattern "#.##"(会去掉末位的0) / "0.00"
*/
public static String roundNumber(Object number, String pattern) {
DecimalFormat df = new DecimalFormat(pattern);
if (number instanceof String) {
if (!TextUtils.isEmpty((String) number)) {
return df.format(Double.parseDouble((String) number));
}
}
if (TextUtils.isEmpty(number + "")) {
return "";
}
return df.format(number);
}
}