java double 做减法溢出数据库有几个double类型的数字,有正的也有负的0.1*0.1+0.2*0.2+(-0.3)*0.3但结果不是-0.04

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/06 06:01:32

java double 做减法溢出数据库有几个double类型的数字,有正的也有负的0.1*0.1+0.2*0.2+(-0.3)*0.3但结果不是-0.04
java double 做减法溢出
数据库有几个double类型的数字,有正的也有负的
0.1*0.1+0.2*0.2+(-0.3)*0.3
但结果不是-0.04

java double 做减法溢出数据库有几个double类型的数字,有正的也有负的0.1*0.1+0.2*0.2+(-0.3)*0.3但结果不是-0.04

用BigDecimal计算

import java.math.BigDecimal;
import java.math.MathContext;

public class $ {

    public static void main(String[] args) {

        // 0.1*0.1+0.2*0.2+(-0.3)*0.3
        // 0.1*0.1+0.2*0.2-0.3*0.3

        BigDecimal a = new BigDecimal(0.1);
        a = a.multiply(a, MathContext.DECIMAL32);

        BigDecimal b = new BigDecimal(0.2);
        b = b.multiply(b, MathContext.DECIMAL32);

        BigDecimal c = new BigDecimal(0.3);
        c = c.multiply(c, MathContext.DECIMAL32);

        a = a.add(b, MathContext.DECIMAL32);
        a = a.subtract(c, MathContext.DECIMAL32);
        
        System.out.println(a.doubleValue());

    }
}

-0.04