1

我想知道如何在我的 Java 应用程序中读取从 1 到数万亿的数字而不会出错。

这是我的代码的一部分:

Scanner sc = new Scanner(System.in);
System.out.print("Enter your money value : ");
long value = sc.nextInt();
System.out.print("Your money in String : "+value);

如果我输入一个从 1 到 2.111.111.999 的值,它可以正常工作,但每次我运行它并输入大于该值时,都会出现以下错误消息:

Exception in thread "main" java.util.InputMismatchException: For input string: "1000000000000"
at java.util.Scanner.nextInt(Scanner.java:2097)
at java.util.Scanner.nextInt(Scanner.java:2050)
at konversiangka.Konversiangka.main(Konversiangka.java:28)

Java 结果:1

我想这是一个“数据类型”错误。我知道如果你想在长数据类型中存储一万亿,你必须在值的末尾添加“L”,比如“1000000000000L”。但我不希望用户在程序中输入值时添加它,

那么你能帮我怎么做吗?我感谢任何建议和更正,谢谢。

4

2 回答 2

3

利用

long value = sc.nextLong();

反而。

错误的原因是可以放入 anint的最大值是 2,147,483,647,即使您将变量声明为 a longScanner.nextInt()也总是尝试将数字转换为int.

于 2013-09-15T10:14:00.600 回答
2

您可以使用 Tharwen 提到的 long,也可以使用 java.math.BigDecimal。BigDecimal 是一个类,用于保存你想要的大(或小)十进制数。您可以在此处查看所有原始数据类型及其最大/最小大小http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Scanner sc = new Scanner(System.in);
System.out.print("Enter your money value : ");
BigDecimal value = sc.nextBigDecimal();
System.out.print("Your money in String : "+value);

Output:
Enter your money value : 271075217301782039710237102710521231.23
Your money in String : 271075217301782039710237102710521231.23
于 2013-09-15T10:18:06.553 回答