当前位置: 首页 > 知识库问答 >
问题:

Java Scanner到底是如何解析double的?

严承允
2023-03-14

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

根据扫描仪的文档:

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

但当我运行代码时:

System.out.println(Locale.getDefault());
Scanner sc = new Scanner("1.0");
sc.nextDouble();

它输出“en_US”,然后抛出一个java。util。sc.nextDouble()处的输入不匹配异常。当扫描器初始化为“1,0”时,它工作

但是,如果我明确设置了区域设置:

Locale.setDefault(Locale.US);
System.out.println(Locale.getDefault());
Scanner sc = new Scanner("1.0");
sc.nextDouble();

它输出“en_US”,然后很好地解析双倍。我错过了什么,还是扫描仪的留档出错了?

编辑根据@感知的建议,我看了第一个例子中的sc.locale()。它打印“da_DK”。那么为什么它不是“en_US”,而这是Locale.getDefault()方法返回的?

共有1个答案

傅嘉悦
2023-03-14

有两种不同的区域设置类别,一种用于显示,另一种用于格式。扫描仪使用Locale.getDefault(区域设置。类别。格式),但是如果您调用Locale.getDefault(),您将获得用于显示的区域设置。setLocale(区域设置)方法设置两者。

 类似资料:
  • null 例如,我在清单中定义了两个变量: 当调试角色中这些变量的类型时······ ...然后变成,但是被解释为: 我不得不在执行生产剧本后艰难地意识到这一点,运行一些不应该运行的东西,因为在库存中变量设置为“false”而不是“false”。因此,我真的很想找到一个明确的答案,关于Ansible如何理解布尔值,以及它如何依赖于变量的定义位置/方式。为了保险起见,我应该简单地总是使用大写的tru

  • 问题内容: 我正在使用Windows 7计算机,其“控制面板\时钟,语言和区域”为“丹麦” 根据扫描仪的文档: 扫描程序的初始语言环境是Locale.getDefault()方法返回的值。 但是当我运行代码时: 它输出“ en_US”,然后在sc.nextDouble()处引发java.util.InputMismatchException。当扫描仪初始化为“ 1,0”时,它可以工作 但是,如果我

  • 问题内容: 我对Java非常陌生,只想确认是什么?它类似于Float还是Int?任何帮助,将不胜感激。我有时还会看到大写字母,有时看到的是小写字母。如果有人可以弄清楚这意味着什么,那就太好了! 问题答案: Double是包装器类, Double类将原始类型double的值包装在对象中。类型为Double的对象包含单个类型为double的字段。 此外,此类提供了几种将double转换为String和

  • 我们知道主存域很少:年轻的、终生的(旧的gen)和PermGen。 年轻领域分为伊甸园和幸存者(有两个)。 OldGen用于生存的对象。 MaxTenuringThreshold防止对象过早地被最终复制到OldGen空间。这很清楚,也很容易理解。 但是它是如何工作的呢?垃圾回收器如何处理这些在MaxTenuringThreshold之前仍然存在的对象,以何种方式?它们位于何处? 对象被复制回幸存者

  • 我正在学习Spring核心认证,我对Spring如何处理bean生命周期有一些疑问,特别是bean后处理器。 所以我有了这个模式: 我很清楚这意味着什么: 然后在bean创建阶段执行以下步骤: > 每个bean都在缺省情况下被急切地实例化(按照正确的顺序创建,并注入其依赖项)。 在依赖注入之后,每个bean都会经历一个后处理阶段,在这个阶段中可能会进行进一步的配置和初始化。 > 初始化器:如果指示

  • 这是一个简单的错误:我在对象的格式字符串中使用了而不是。但我完全困惑于我的测试结果与错误的格式字符串。 以下代码: @Jan建议依赖toString()方法可能会有问题,所以我定义了一个日期格式,以与上面相同的代码打印。下面是附加输出: