我已经做了一个非常简单的数字舍入应用程序,因为我是一个初学者,可能会有一些错误,一些调试要做,我们可以继续,但这不是我在这里的原因。每当我输入一个大于值" 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会返回如随机数?
答案 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值的实际二进制格式表示。