永发信息网

java中BigDecimal 的加减乘除和“+”“-”“*”“/”有什么区别

答案:3  悬赏:60  手机版
解决时间 2021-03-31 23:34
  • 提问者网友:流星是天使的眼泪
  • 2021-03-31 05:01
java中BigDecimal 的加减乘除和“+”“-”“*”“/”有什么区别
最佳答案
  • 五星知识达人网友:想偏头吻你
  • 2021-03-31 06:41
BigDecimal用作商业计算的。
BigDecimal aDouble =new BigDecimal(1.22);     输出:1.2199999999999999733546474089962430298328399658203125
BigDecimal aString = new BigDecimal("1.22");   输出:1.22
以上两者输出结果是不一样的。
原因:
double的构造方法有不可预知性。
String的构造方法是固定的值。
所以如果类型是Double的话,而且需要精确计算,就用下面方法:
Double.toString(double)方法,可以先转为String,然后再用new BigDecimal("")构造方法。
注意:BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以在做加减乘除运算时千万要保存操作后的值
Demo测试

    public static final void main(String[] args) {
        BigDecimal aBigDecimal = new BigDecimal("1.1");
        BigDecimal bBigDecimal = new BigDecimal("2.0");
        
        BigDecimal subtract = bBigDecimal.subtract(aBigDecimal);
        System.out.println("使用BigDecimal进行相减计算:" + subtract.doubleValue());

        System.out.println("直接相减: " + (2.0 - 1.1));结果:
使用BigDecimal进行相减计算:0.9
直接相减: 0.8999999999999999
全部回答
  • 1楼网友:往事埋风中
  • 2021-03-31 08:03

直接在java类中进行运算,可以明显看出,直接运算会产生精度丢失!!!
  • 2楼网友:摆渡翁
  • 2021-03-31 06:49

你首先要理解java中有数据运算时候有精度丢失问题。
比如 1 - 0.9这个计算的结果不是你想的0.1,而是0.09999999999999998。
BigDecimal就是解决这个问题的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯