为什么JVM会返回此整数?

时间:2017-01-21 16:24:09

标签: java debugging jvm rounding

我已经做了一个非常简单的数字舍入应用程序,因为我是一个初学者,可能会有一些错误,一些调试要做,我们可以继续,但这不是我在这里的原因。每当我输入一个大于值" int"的容量的整数时,它就会返回" -1"或者是一个非常大的小数字(它的负数远离零),例如" -572589576"。我想知道JVM为什么以及如何返回它。我的程序代码如下:

import java.util.Scanner;

public class NumberRounder {
private static Scanner userInput2;

public static void main(String[] args) {

    System.out.println("--- Number Rounder ---");

    Scanner userInput = new Scanner(System.in);
    System.out.println("The number you enter will round it to the nearest value.");
    System.out.print("Enter any decimal number: ");

    if (userInput.hasNextDouble()) {
        System.out.println("\nCalculating...");
        System.out.println("Number Rounding...");
        double chosenNumber = userInput.nextDouble();
        int roundedNumber = (int) Math.round(chosenNumber);
        if (roundedNumber == -1) {
            System.out.println("\nAn ERROR occured.");
            System.out.println("That number is too large for our servers. Sorry for the inconvenience.");
            System.exit(0);
        }
        System.out.println(chosenNumber + " has been rounded to " + roundedNumber);
    } else if (!(userInput.hasNextDouble())) {
        System.out.println("\nThat is an illegal response...");
        userInput2 = new Scanner(System.in);
        System.out.println("\nThe number you enter will round it to the nearest value.");
        System.out.print("Enter any decimal number between 1-10: ");
        double chosenNumber = userInput2.nextDouble();
        int roundedNumber = (int) Math.round(chosenNumber);
        System.out.println(chosenNumber + " has been rounded to " + roundedNumber);
    } else {
        System.out.println("Something wrong happened...");
    }
}
}

我已经解决了它何时返回" -1"但是我还是不知道如何彻底解决这个问题。这就是为什么我在这里问这个问题: 为什么JVM会返回如随机数?

2 个答案:

答案 0 :(得分:0)

您强制将double(64位)强制转换为int,因此结果值会被截断,您会看到这些"随机" (虽然他们不是随机的)价值观。您应该使用long为您的号码提供额外的空间。

答案 1 :(得分:0)

  

每当我输入一个大于值“int”

的容量的整数时

你期望得到什么?异常?

它不会在那里。 Java只是从MAX_VALUE循环到MIN_VALUE

试试吧:

    System.out.println(Integer.MAX_VALUE + 1);
    System.out.println(Integer.MIN_VALUE);

看看它打印的内容。

PS。这是关于数字符号如何以int值的实际二进制格式表示。