首页 > 编程语言 > 详细

java BigDecimal使用

时间:2019-08-09 10:28:53      阅读:69      评论:0      收藏:0      [点我收藏+]

一、BigDecimal的加减乘除:

package com.cy.test.math;

import java.math.BigDecimal;

public class TestBigDecimal {
    public static void main(String[] args) {
        //加法
        double d1 = 1.234;
        double d2 = 2.341;
        System.out.println(d1 + d2);    //3.575

        System.out.println(d1 * d2);    //2.8887940000000003精度出问题了
        System.out.println(d1 / d2);    //0.5271251601879539 这个是对的

        //使用BigDecimal,加法
        BigDecimal b1 = new BigDecimal(Double.toString(d1));
        BigDecimal b2 = new BigDecimal(Double.toString(d2));
        System.out.println(b1.add(b2).doubleValue());       //3.575

        //减法
        System.out.println(b1.subtract(b2).doubleValue());  //-1.107

        //乘法
        System.out.println(b1.multiply(b2).doubleValue());  //2.888794

        //除法  保留小数点后两位,四舍五入
        System.out.println(b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP)); //0.53
    }
}

二、BigDecimal转String的时候出现的精度问题:

有些两位类型的小数如double类型的,直接转化为String时,调用的是BigDecimal的toString方法,会出现精度问题。解决办法:

package com.cy.test.math;

import java.math.BigDecimal;

public class TestBigDecimal3 {

    public static void main(String[] args) {
        BigDecimal b1 = new BigDecimal(1.23);
        BigDecimal b2 = new BigDecimal(1.24);
        BigDecimal b3 = new BigDecimal(1.25);

        System.out.println(b1);
        System.out.println(b2);
        System.out.println(b3);

        BigDecimal plus = b1.add(b2).add(b3);
        //直接打印会精度失真
        System.out.println(plus);
        System.out.println(String.valueOf(plus.floatValue()));

        //设置小数位数,第一个变量是小数位数,第二个变量是取舍方法(四舍五入)
        BigDecimal plus2 = b1.add(b2).add(b3).setScale(2, BigDecimal.ROUND_HALF_UP);
        System.out.println(plus2);
    }
}

打印结果:

1.229999999999999982236431605997495353221893310546875
1.2399999999999999911182158029987476766109466552734375
1.25
3.7199999999999999733546474089962430298328399658203125
3.72
3.72

 

java BigDecimal使用

原文:https://www.cnblogs.com/tenWood/p/11325247.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!