我想知道如何在我的 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"。但我不希望用户在程序上输入值时添加它,
那你能帮我怎么做吗?我感谢任何建议和更正,谢谢。
使用
long value = sc.nextLong();
相反。
错误的原因是可以放入int
的最大值是 2,147,483,647,即使您将变量声明为 long
,Scanner.nextInt()
总是尝试将数字转换为int
。
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