You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:57:01