Discuss / Java / BigDecimal计算出的结果会有误差吗?为啥余数部分不正确

BigDecimal计算出的结果会有误差吗?为啥余数部分不正确

Topic source

浩子_No1

#1 Created at ... [Delete] [Delete and Lock User]
public class Main {
    public static void main(String[] args) {
        BigDecimal n = new BigDecimal("12.345");
        BigDecimal m = new BigDecimal("0.12");
        BigDecimal[] dr = n.divideAndRemainder(m);
        System.out.println(dr[0]); // 102
        System.out.println(dr[1]); // 0.105
    }
}

我用计算器算了下应该是102.875才对,为啥代码计算出的余数部分是0.105

jo白灯

#2 Created at ... [Delete] [Delete and Lock User]

都没算错,是你数学概念没弄清。

余数是0.105,除数是0.12,0.105÷0.12=0.875,就是说还余0.875个除数。

余数和商的概念建议查看小学课本(没有别的意思哦,别多想)

小白个人见解(望大神指正):

我们可以利用这个方法判断两个BigDecimal是否是整数倍数:

public static void main(String[] args) {

        BigDecimal n = new BigDecimal("12.345");

        BigDecimal m = new BigDecimal("0.12");

        BigDecimal[] dr = n.divideAndRemainder(m);

        System.out.println(12.345/0.12);   

        System.out.println(dr[0]); // 102

        System.out.println(dr[1]); // 0.105

**        if (dr[1].signum() == 0) {**

**            System.out.println("n是m的整数倍");**

**        }**

}

}

102.87500000000001

102.0

0.105

你不是按照除数跟余数来的,而是直接把商算成带小数的,这种情况就没有余数了,得这样算:

被除数÷除数=商……余数(其中,余数小于除数)

除数×商+余数=被除数。

Frank

#6 Created at ... [Delete] [Delete and Lock User]

差点让你给整不会了,一个是商,一个是余数,你用计算器算出来的是商。

黑澤 一樹

#7 Created at ... [Delete] [Delete and Lock User]

12.345 / 0.12 = 102.875 (商)

102 * 0.12  = 12.24

12.345 - 12.24 = 0.105 (余)


  • 1

Reply