我想知道如何在没有错误的情况下读取My 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”。但我不希望用户在程序中输入值时添加
那你可以帮我怎么做吗? 我感谢任何建议和更正,谢谢。
答案 0 :(得分:3)
使用
long value = sc.nextLong();
代替。
错误的原因是可以放入int
的最大值是2,147,483,647,即使您将变量声明为long
,Scanner.nextInt()
始终会尝试将数字转换为int
。
答案 1 :(得分:2)
你可以使用Tharwen提到的长或你可以使用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