import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
/**
* Number工具类
*
*/
public abstract class NumberUtil {
//------------常量定义-------------//
/** 零 */
public static BigDecimal ZERO = BigDecimal.ZERO;
/** 一百 */
public static BigDecimal ONE_HUNDRED = new BigDecimal("100");
private static NumberFormat nf = new DecimalFormat("0000");
public static MathContext mc = new MathContext(16);
/**
* double 相加
*
* @param dd
* @return
*/
public static double doubleAdd(double... dd) {
BigDecimal result = BigDecimal.ZERO;
for (double n : dd) {
result = result.add(new BigDecimal("" + n));
}
return result.doubleValue();
}
/**
* double 相加 - 四舍五入
*
* @param dd
* @return
*/
public static double doubleAddScaled(double... dd) {
BigDecimal result = BigDecimal.ZERO;
for (double n : dd) {
result = result.add(new BigDecimal("" + n));
}
return scale(result);
}
/**
* double 相减
*
* @param d1
* @param d2
* @return
*/
public static double doubleSubtract(double d1, double d2) {
return new BigDecimal("" + d1).subtract(new BigDecimal("" + d2)).doubleValue();
}
/**
* double 相减 - 四舍五入
*
* @param d1
* @param d2
* @return
*/
public static double doubleSubtractScaled(double d1, double d2) {
return scale(new BigDecimal("" + d1).subtract(new BigDecimal("" + d2)));
}
/**
* 四舍五入 - RoundingMode.HALF_UP
*
* @param decimal
* @return
*/
private static double scale(BigDecimal decimal) {
return decimal.setScale(2, RoundingMode.HALF_UP).doubleValue();
}
/**
* 货币形式格式字符串
*
* @param ####,###0.00
* @param value
*/
public static String formatNumberString(String format, String value) {
BigDecimal bd = new BigDecimal(value);
DecimalFormat df = new DecimalFormat(format);
return df.format(bd);
}
/**
* 相除 取位 d1/d2 - 四舍五入
*
* @param d1
* @param d2
* @param scale
* @return
*/
public static double doubleDivide(double d1, double d2, int scale) {
BigDecimal bd1 = new BigDecimal(d1);
BigDecimal bd2 = new BigDecimal(d2);
BigDecimal bd3 = bd1.divide(bd2, mc);
return bd3.setScale(scale, RoundingMode.HALF_UP).doubleValue();
}
/**
* 相乘 取位 d1*d2 - 四舍五入 默认保留2位
*
* @param d1
* @param d2
* @return
*/
public static double doubleMultiply(double d1, double d2) {
return doubleMultiply(d1, d2, 2);
}
/**
* 相乘 取位 d1*d2 - 四舍五入
*
* @param d1
* @param d2
* @param scale
* @return
*/
public static double doubleMultiply(double d1, double d2, int scale) {
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
return bd1.multiply(bd2, mc).setScale(scale, RoundingMode.HALF_UP).doubleValue();
}
/**
* 相乘 取位 d1*d2 - 四舍五入
*
* @param scale
* @param dd
* @return
*/
public static double doubleMultiplyScale(int scale, double... dd) {
BigDecimal result = BigDecimal.ONE;
for (double n : dd) {
result = result.multiply(new BigDecimal("" + n), mc);
}
return result.setScale(scale, RoundingMode.HALF_UP).doubleValue();
}
/**
* 将整数转化为四位数字
*
* @param number
* @return
*/
public static String formatFourNumber(Integer number) {
return nf.format(number);
}
/**
* 获取带千分符并保留两位小数的金额
*
* @param amount
* @return
*/
public static String formatNumber(double amount) {
String result = NumberFormat.getCurrencyInstance().format(amount).substring(1);
return result;
}
}