Java中Scanner的nextDouble()为何仅识别逗号分隔小数不识别点?
问题根因
该问题是Scanner类的数字解析规则和系统默认区域设置(Locale)不匹配导致的:
Scanner默认使用JVM继承的操作系统默认Locale解析数字,不同地区的Locale对小数点符号的规定存在差异- 西班牙语、法语等小语种地区的Locale默认将逗号
,规定为小数分隔符,点.为千位分隔符,和英语地区的规则恰好相反 - 你的代码没有主动为
Scanner指定Locale,当运行环境的默认Locale属于用逗号做小数点的区域时,输入带点的小数会被判定为非法格式,直接抛出InputMismatchException,替换为逗号后符合当前Locale的解析规则,因此可以正常运行。
修复方案
如果需要支持以点作为小数点的输入格式,可在初始化Scanner后主动指定英语系Locale即可:
import java.util.Locale; // 初始化Scanner后添加以下代码 scan.useLocale(Locale.US);
内容的提问来源于stack exchange,提问作者KevinDoUrden
相关产品推荐
相关产品推荐

