0

我正在尝试使用 Java Scanner 从文本文件 (File.txt) 中读取 20 位长。

java.util.Scanner filereader = new java.util.Scanner(new File("File.txt"));
longNumber = (long) filereader.nextLong();

这将返回以下错误:

Exception in thread "main" java.util.InputMismatchException: For input string: "37107287533902102798"
at java.util.Scanner.nextLong(Scanner.java:2271)
at java.util.Scanner.nextLong(Scanner.java:2225)
at scanner.Scanner.main(Scanner.java:14)

当我将数字的长度减少到 19 位或更少时,它运行得很好。有人可以解释我如何将其用于 20 位以上的数字吗?

4

2 回答 2

6

long不能存储无限长的数字。它只上升到(2^63)-1。见这里:(链接)。

long 数据类型是一个 64 位有符号二进制补码整数。它的最小值为-9,223,372,036,854,775,808,最大值为9,223,372,036,854,775,807(含)。当您需要比 int 提供的值范围更广的值时,请使用此数据类型。

要将其用于更多数字,您必须使用BigInteger文档链接)。

java.util.Scanner filereader = new java.util.Scanner(new File("File.txt"));
bigInt = new BigInteger(filereader.nextLine());
于 2013-01-04T14:45:38.280 回答
1

37107287533902102798 显然超出了远程范围,因此您会遇到异常。

您应该使用 BigInteger 来读取这些值。

BigInteger in = new BigInteger("37107287533902102798");
于 2013-01-04T14:45:40.747 回答