Java扫描器到底是如何解析double的?

Java扫描器到底是如何解析double的?,java,java.util.scanner,locale,Java,Java.util.scanner,Locale,我使用的是Windows 7机器,其“控制面板\时钟、语言和区域”为“丹麦” 根据以下文件: 扫描仪的初始区域设置是locale.getDefault()方法返回的值 但当我运行代码时: System.out.println(Locale.getDefault()); Scanner sc = new Scanner("1.0"); sc.nextDouble(); 它输出“en_US”,然后在sc.nextDouble()处抛出java.util.InputMismatchException

我使用的是Windows 7机器,其“控制面板\时钟、语言和区域”为“丹麦”

根据以下文件:

扫描仪的初始区域设置是locale.getDefault()方法返回的值

但当我运行代码时:

System.out.println(Locale.getDefault());
Scanner sc = new Scanner("1.0");
sc.nextDouble();
它输出“en_US”,然后在sc.nextDouble()处抛出java.util.InputMismatchException。 当扫描仪初始化为“1,0”时,它工作

但是,如果我显式设置了区域设置:

Locale.setDefault(Locale.US);
System.out.println(Locale.getDefault());
Scanner sc = new Scanner("1.0");
sc.nextDouble();
它输出“en_US”,然后解析double。是我遗漏了什么,还是扫描仪的文档有误


Edit根据@Perception的建议,我查看了第一个示例中的sc.locale()。上面印着“da_DK”。那么,当Locale.getDefault()方法返回的是“en_US”时,为什么不是“en_US”?

有两种不同的方法,一种用于显示,另一种用于格式。扫描仪使用
Locale.getDefault(Locale.Category.FORMAT)
,但如果调用
Locale.getDefault()
则会获得要显示的区域设置。
setLocale(Locale)
方法同时设置了这两个选项。

似乎您的计算机认为它在法国或法属加拿大……那么它为什么要打印出
en_US
?但是@AndrewMao肯定是对的,它对我有用。文档的哪一部分是不可理解的?在您的第一个示例中,
sc.locale()
为您打印了什么?@Perception它打印了“da_DK”-但它为什么这样做?文档是否说明它应该从Locale.getDefault()获取Locale?谢谢。我似乎在任何文档(扫描仪)中都找不到这一点。你是赖特,官方误导了你。甚至有人说,
扫描仪的初始区域设置是locale.getDefault()方法返回的值。