有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java检查这两个数字是否等于n个有效数字

我算出了代码的主要部分,但我无法算出如何得到它,因此它只能读取用户输入的小数点后的差值。那么,我如何才能接受用户输入(输入的是第三个数字),并找到前两个数字是否等于小数点。该程序的目标是检查这两个数字是否等于n(用户输入的数字)有效位

样本输入: 5.124 5.125 2

样本输出: 差值=.001,数字等于小数点后2位

import java.util.Scanner;
public class Equal {

    public static void main(String[] args) {
        Scanner input = new Scanner( System.in );
        String diff="diffrence =";
        double num1;
        double num2; 
        double num3;
        double calc;
        while(input.hasNext()){
            num1 = Double.parseDouble(input.next());
            num2 = Double.parseDouble(input.next());
            num3 = Double.parseDouble(input.next());
            calc = Math.abs(num1-num2);
            System.out.printf("%s %.10f", diff, calc);
        }
    }
}

共 (2) 个答案

  1. # 1 楼答案

    下面是一个普通双打的示例和junit测试用例。希望这有帮助

    public boolean doublesSameNumberOfDecimalPlaces(double x,double y,int numberOfDecimals){
        x = (long)(x * Math.pow(10, numberOfDecimals));
        y = (long)(y * Math.pow(10, numberOfDecimals));
        return x==y;
    }
    
    @Test
    public void TestDoublesSameNumberOfDecimalPlaces(){
        double x = 3.141593;
        double y = 3.14159265359;
        assertTrue(doublesSameNumberOfDecimalPlaces(x,y,0));
        assertTrue(doublesSameNumberOfDecimalPlaces(x,y,1));
        assertTrue(doublesSameNumberOfDecimalPlaces(x,y,2));
        assertTrue(doublesSameNumberOfDecimalPlaces(x,y,3));
        assertTrue(doublesSameNumberOfDecimalPlaces(x,y,4));
        assertTrue(doublesSameNumberOfDecimalPlaces(x,y,5));
        assertFalse(doublesSameNumberOfDecimalPlaces(x,y,6));
    }
    
  2. # 2 楼答案

    使用BigDecimal的好方法:

    import java.math.BigDecimal;
    import java.math.MathContext;
    import java.math.RoundingMode;
    import java.util.Scanner;
    
    public class Equal {
    
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            String num1;
            String num2;
            int num3;
            while (input.hasNext()) {
                // First number
                num1 = input.next();
                // Second number
                num2 = input.next();
                // Number of significant figures
                num3 = Integer.parseInt(input.next());
                MathContext mc = new MathContext(num3, RoundingMode.HALF_UP);
                BigDecimal bdNum1 = new BigDecimal(num1, mc);
                BigDecimal bdNum2 = new BigDecimal(num2, mc);
                System.out.println(bdNum1.equals(bdNum2));
            }
            input.close();
        }
    }
    

    根据您的具体需要,您可能希望使用RoundingMode

    样本输入:

    1.2345678
    1.2345679
    7
    

    样本输出:

    true
    

    样本输入:

    0.123
    0.124
    3
    

    样本输出:

    false
    

    请注意,在以下特殊情况下,行为可能与预期不同:

    输入:

    0.10000
    0.1000
    8
    

    输出:

    false