Java在金额方面的使用

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);
        }
    }








。。。。

猜你喜欢

转载自blog.csdn.net/lingmao555/article/details/78779113