Java程序报错InputMismatchException:无法读取浮点/双精度数值
问题解决:Scanner读取double类型数值报错InputMismatchException
第一步:排查代码一致性问题
从报错栈信息可以明确看到,程序实际执行的是Scanner.nextInt()方法(报错行指向Javabasics.main(Javabasics.java:9)的nextInt调用),但你提供的代码里写的是sc.nextDouble()。请先确认:
- 检查VS Code中打开的
Javabasics.java文件,确保第9行确实是double price=sc.nextDouble();,而非nextInt() - 保存修改后的代码,重新执行编译命令
javac Javabasics.java和运行命令java Javabasics
若代码确认无误,解决Locale区域设置问题
如果代码确实调用了nextDouble()但仍报错,核心原因是系统区域设置的小数点分隔符与输入格式不匹配:
- 比如中文、德语等区域,默认用逗号(
,)作为小数点分隔符,而你输入的是点(.),Scanner会判定为非法格式,抛出InputMismatchException
提供两种解决方法:
方法1:适配系统区域的输入格式
按照系统要求输入数值,将小数点替换为逗号,比如输入12,456而非12.456
方法2:强制Scanner使用点作为小数点分隔符
在创建Scanner实例后,设置其Locale为英语区域,强制识别点作为小数点:
import java.util.*; public class Javabasics{ public static void main (String args[]) { Scanner sc=new Scanner(System.in); // 设置Locale为英语区域,统一用点作为小数点 sc.useLocale(Locale.US); double price=sc.nextDouble(); System.out.println(price); } }
编译运行这段代码后,输入12.456即可正常读取。
内容的提问来源于stack exchange,提问作者Grow More
相关产品推荐
相关产品推荐

