double类型在计算中存在缺陷,在金额的计算时需要更精确的类型。
public static double add(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();
}
public static double sub(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
public static double mul(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
}
public static double div(double v1,double v2){
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.divide(b2).doubleValue();
}
将一个double类型的数据转换为金额表示的字符串
/**
* 将金额转换成金额表示的标准格式
* @param money double类型的数据
* @param pattern 非定域模式字符串
* @return String 类型的字符串
*/
public static String moneyFormat(double money, String pattern) {
pattern = (pattern == null || pattern.equals("")) ? "#,##0.00" : pattern;
DecimalFormat df = new DecimalFormat(pattern);
try {
return df.format(money);
}
catch (Exception e) {
//log输出错误信息
return String.valueOf(money);
}
}
将一个String类型的标准金额格式转换为double类型的数字
/**
* 将金额标准格式转换成金额
* @param inputStr 金额标准格式
* @return double类型的数字
*/
public static double FormatToMoney(String inputStr){
double money = 0.00;
if(inputStr == null || inputStr.equals(""))
return money;
money = Double.parseDouble(inputStr.replace(",", ""));//去掉标准格式中的逗号
return money;
}
将一个BigDecimal的字符串转换为金额表示的形式
/**
* 将金额标准格式转换成金额(解决了如果数据太大double表示不精确)
* @param inputStr BigDecimal的金额数据
* @param pattern 非定域模式
* @return 格式化后的金额表示
*/
public static String moneyFormat(BigDecimal inputStr, String pattern){
pattern = (pattern == null || pattern.equals("")) ? "#,##0.00" : pattern;
DecimalFormat df = new DecimalFormat(pattern);
try {
return df.format(inputStr);
}
catch (Exception e) {
// log输出错误信息
return String.valueOf(inputStr);
}
}
。。。。