此问题在此处已有答案:
How to specify decimal delimiter for Scanner.nextDouble()(3个答案)
上个月关门了。
你好,我有一个问题,当以下教程在youtube(代码是在java中,我使用intelliji的想法)
import java.text.NumberFormat;
import java.util.Locale;
import java.util.Scanner;
public class Main {
public static void main(String[] arg) {
final byte MONTHS_IN_YEAR = 12;
final byte PERCENT = 100;
Scanner scanner = new Scanner(System.in);
System.out.print("Principal: ");
int principal = scanner.nextInt();
System.out.print("Annual Interest Rate: ");
float annualInterest = scanner.nextFloat();
float monthlyInterest = annualInterest / PERCENT / MONTHS_IN_YEAR;
System.out.print("Period (Years): ");
byte years = scanner.nextByte();
int numberOfPayments = years * MONTHS_IN_YEAR;
double mortgage = principal
* (monthlyInterest * Math.pow(1 + monthlyInterest, numberOfPayments))
/ (Math.pow(1 + monthlyInterest, numberOfPayments) - 1);
String mortgageFormatted = NumberFormat.getCurrencyInstance(Locale.US).format(mortgage);
System.out.println("Mortgage: " + mortgageFormatted);
}
}
字符串
问题是当我输入年利率(如3.92)时,它给予我以下错误:
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:947)
at java.base/java.util.Scanner.next(Scanner.java:1602)
at java.base/java.util.Scanner.nextFloat(Scanner.java:2505)
at com.codewithtamer.Main.main(Main.java:17)
型
也谢谢你帮助像我这样的初学者:),+我想我不知怎么搞砸了这篇文章的格式抱歉
3条答案
按热度按时间ogq8wdun1#
如果你想在你的Scanner中使用一个不同于默认语言环境(Java从操作系统中获取的语言环境)的语言环境,你可以这样做:
字符串
这将显示您当前的区域设置(对我来说,它打印
en_AU
),然后设置扫描仪使用不同的区域设置。Locale.US
需要.
作为小数点分隔符,Locale.FRANCE
需要,
,依此类推。f5emj3cl2#
不幸的是,在某些IDE的某些版本中,java.util.Scanner以欧式模式(即带小数点逗号)。正如StackOverflow Q&A(Scanner.next... throws java.util.InputMismatchException for Float but not for Int)所建议的那样,在Eclipse和Netbeans中已经观察到了这一点。您可以考虑更改IDE的版本,或者您可以使用逗号(不理想)编写百分比,或者您可以依赖
Float.parseFloat()
,如下所示:字符串
这应该适用于小数点,因为
Float.parseFloat()
不依赖于位置,并且总是需要小数点。e0bqpujr3#
根据JavaDoc for Scanner#nextFloat,
而且,nextInt 方法也是如此-如果值不是整数值,则抛出异常。
不过,需要注意的是,您可以使用 nextFloat 来捕获整数值。
例如,在一个示例中,
字符串
还有
型