我输入了正确的值,但是打印了错误的值

时间:2019-04-20 13:24:31

标签: java

我输入了正确的值,但是打印了错误的值。 (*商号显示到小数点后第一位。)

System.out.printf ("What is quotient of %d / %d ? ", n1, n2);
double answer1 = s.nextDouble();  //enter quotient

System.out.printf("What is remainder of %d / %d ? ", n1, n2);
double answer2 = s.nextDouble();  //enter remainder

if ((quotient == answer1) && (((n1-(quotient*n2)) == answer2)))
  System.out.print("Correct!");

else {  System.out.print("Incorrect: ");  //error point I think
System.out.printf("%d / %d = %f, Remainder: %f \n", n1, n2, quotient, (n1-(quotient*n2)));   }

当问题是6/7时,如果我输入正确答案0.8,其余的0.4,则显示“错误:6/7 = 0.800000,余数:0.400000”,而不是“正确!”。我该怎么办?

2 个答案:

答案 0 :(得分:4)

这是由于浮点运算和精度。差异可能在逗号后的第十位。因此,不应将浮点数与==进行比较,而应检查它们的差值是否低于某个阈值。

double a = ...;
double b = ...;

if (Math.abs(a-b) < 0.0001) {
  //Consider as equal
} else { 
  //Consider as unequal
}

答案 1 :(得分:0)

即使两个浮点变量(例如a和b)在数学上都具有相同的值,但它们的相等性可能不会返回true,即a == b可能不是true。因此,我们找到差异以查看差异是否可以忽略。因此,请尝试以下操作:

import java.util.*;

class Solution{
    public static void main(String args[]){
        Scanner s = new Scanner(System.in);
        int n1 = 6, n2 = 7;

        System.out.printf ("What is quotient of %d / %d ? ", n1, n2);
        double answer1 = s.nextDouble();  //enter quotient

        System.out.printf("What is remainder of %d / %d ? ", n1, n2);
        double answer2 = s.nextDouble();  //enter remainder

        double num = answer1 * n2 + answer2; //calculate user's number
        if (Math.abs(new Double(n1) - num) <= 0.1f)
            System.out.print("Correct!");
        else{
            System.out.print("Incorrect: ");  //error point I think
            double quotient = new Double(n1) / new Double(n2);
            double remainder = new Double(n1) - quotient * new Double(n2);
            System.out.printf("%d / %d = %f, Remainder: %f \n", n1, n2, quotient, remainder);
        }
    }
}