Java bigdemical精确计算

来源:互联网 发布:大数据在运营商的运用 编辑:程序博客网 时间:2024/05/19 04:29

很多同学在实际开始中都遇到过这样的问题,就是在对商品价格进行计算的时候都出现了不精确的问题,下面我们就来看看;

  /**     * a 乘以b     * @param chengshu     * @param beiChengShu     * @return     */    public static String multiply(String chengshu, String beiChengShu) {        BigDecimal bigDecimal = new BigDecimal(chengshu);        BigDecimal bigDecimal2 = new BigDecimal(beiChengShu);        BigDecimal multiply = bigDecimal.multiply(bigDecimal2);        return multiply.toString();    }    /**     * a 除以b     * @param chushu     * @param beiChuShu     * @return     */    public static String divide(String chushu, String beiChuShu) {        BigDecimal bigDecimal = new BigDecimal(chushu);        BigDecimal bigDecimal2 = new BigDecimal(beiChuShu);        BigDecimal multiply = bigDecimal.divide(bigDecimal2);        return multiply.toString();    }    /**     * a 加b     * @param jiashu     * @param beiJiaShu     * @return     */    public static String add(String jiashu, String beiJiaShu) {        BigDecimal bigDecimal = new BigDecimal(jiashu);        BigDecimal bigDecimal2 = new BigDecimal(beiJiaShu);        BigDecimal multiply = bigDecimal.add(bigDecimal2);        return multiply.toString();    }    /**     * a 减b     * @param jianshu     * @param beiJianShu     * @return     */    public static String subtract(String jianshu, String beiJianShu) {        BigDecimal bigDecimal = new BigDecimal(jianshu);        BigDecimal bigDecimal2 = new BigDecimal(beiJianShu);        BigDecimal multiply = bigDecimal.subtract(bigDecimal2);        return multiply.toString();    }    /**     * 保留2位小数,第三位四舍五入     * @param     * @return     */    public static String hasTwo(Object target) {        DecimalFormat format = new DecimalFormat("#.00");        return format.format(target);    }

另外一种除法比较灵活:

bigDecimal.divide(new BigDecimal("1000"),3,BigDecimal.ROUND_HALF_DOWN)BigDecimal bigDecimal = new BigDecimal("1.2022");    System.err.println("ROUND_DOWN="+bigDecimal.setScale(1, BigDecimal.ROUND_DOWN));//只取小数点后一位,不管下一位    System.err.println("ROUND_UP="+bigDecimal.setScale(1, BigDecimal.ROUND_UP));//只要有后面有数字就向上进以为,0除过    System.err.println("ROUND_HALF_UP="+bigDecimal.setScale(1, BigDecimal.ROUND_HALF_UP));//下一位大于等于0.5就会向上进一位,否则只取小数点后一位    System.err.println("ROUND_HALF_DOWN="+bigDecimal.setScale(1, BigDecimal.ROUND_HALF_DOWN));//去小数点后1为,除非下一位大于0.5才会向上进一位
0 0