Java Scanner#nextDouble解析5.2抛出InputMismatchException问题问询
根因分析
Scanner#nextDouble()方法默认采用JVM当前的系统区域设置(Locale)解析数字,部分区域的标准小数分隔符为逗号,而非点.,输入5.2不符合对应区域的数字格式规则,因此触发InputMismatchException,整数无小数分隔符所以可以正常解析。
修复方案
可任选以下任意一种方式解决:
- 方案1:强制指定Scanner使用支持点作为小数分隔符的区域设置
初始化Scanner后新增一行配置即可,需要导入java.util.Locale包:Scanner sc = new Scanner(System.in); sc.useLocale(Locale.US); - 方案2:适配当前系统的输入规则,输入小数时用逗号替换点,比如输入
5,2即可正常识别 - 方案3:先以字符串形式读取输入,统一替换分隔符后再转为double类型:
String inputStr = sc.next(); double num = Double.parseDouble(inputStr.replace(',', '.'));
内容的提问来源于stack exchange,提问作者Yashmerino
相关产品推荐
相关产品推荐

