【问题标题】:Java Logical Error - Tenth Place Decimal not showing [duplicate]Java逻辑错误-第十位小数未显示[重复]
【发布时间】:2020-12-14 15:08:11
【问题描述】:

我的程序让用户计算两个数字,然后根据用户输入的运算符执行简单的计算。所以我的源代码是:

    System.out.print("Enter First Number: ");
    int num1 = scanNum.nextInt();
    
    System.out.print("Enter Second Number: ");
    int num2 = scanNum.nextInt();
    
    System.out.print("Enter Operator (+, -, * or /): ");
    char opt = scanOpt.next().charAt(0);
    
    scanNum.close();
    scanOpt.close();
    
    
    switch (opt)    
    {
        case '+':
            float result = num1 + num2;
            System.out.println(num1 + " " + opt + " " + num2 + " = " +result);
            break;
            
        case '-':
            result = num1 - num2;
            System.out.println(num1 + " " + opt + " " + num2 + " = " +result);
            break;
        
        case '*':
            result = num1 * num2;
            System.out.println(num1 + " " + opt + " " + num2 + " = " +result);
            break;
        
        case '/':
            result = num1 / num2;
            System.out.println(num1 + " " + opt + " " + num2 + " = " +result);
            break;
        
        default:
            System.out.println("Invalid Operator!");
            break;

它工作得很好,但是每当它将两个数字相除时,例如“6.0 / 4.0”,第十位小数就不会出现。正确的输出应该是:

Enter First Number: 6
Enter Second Number: 4
Enter Operator (+, -, * or /): /
6 / 4 = 1.5

但使用我自己的源代码输出是:

Enter First Number: 6
Enter Second Number: 4
Enter Operator (+, -, * or /): /
6 / 4 = 1.0

【问题讨论】:

  • @Ivar 我已经把数据类型改成了双精度,但是还是不行
  • num1num2 需要为十进制类型。如果您将其中一个转换为floatdouble,它将起作用。喜欢result = (double)num1 / num2
  • 已经工作了,谢谢!

标签: java switch-statement


【解决方案1】:

发生这种情况是因为 Java 将两个整数相除,从而产生一个整数输出。 尝试将输入声明为浮点数 或者另类

1.0 * num1 / num2

这会将 num1 “转换”为浮点值。

【讨论】:

  • 我已经将 num1 和 num2 转换为 double 并且它起作用了。但这一个也有效。谢谢你!
【解决方案2】:
        double result;
        switch (opt)    
        {
            case '+':
                result = (double) num1 + num2;
                System.out.println(num1 + " " + opt + " " + num2 + " = " +result);
                break;
                
            case '-':
                result = (double)num1 - num2;
                System.out.println(num1 + " " + opt + " " + num2 + " = " +result);
                break;
            
            case '*':
                result = (double) num1 * num2;
                System.out.println(num1 + " " + opt + " " + num2 + " = " +result);
                break;
            
            case '/':
                result = (double) num1 / num2;
                System.out.println(num1 + " " + opt + " " + num2 + " = " +result);
                break;
            
            default:
                System.out.println("Invalid Operator!");
                break;
        }

【讨论】:

    猜你喜欢
    • 2022-06-23
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    相关资源
    最近更新 更多