java - 不同的区域设置会发生 NumberFormatException

标签 java settings numberformatexception regional

我正在用 Java 开发一个应用程序,发现了这个奇怪的行为:

如果通过控制面板将区域设置格式设置为匈牙利语(系统默认值),我会收到此异常,但如果我将其设置为英语格式,则它可以正常工作。也适用于虚拟 Mandriva,我首先在那里开发该程序。

这是导致问题的代码片段:

public String stattxt(){
    double dt = time_avg();
    double bpm = (Double.compare(dt, 0) == 0) ? 0 : msec2bpm(dt);
    String s = "<html>Number of control points: " + timestamps.size() + "<br>Average dt: " +
        Double.valueOf(new DecimalFormat("#.####").format(dt).toString()) + " ms<br>" +
        "Average BPM: " + Double.valueOf(new DecimalFormat("#.####").format(bpm).toString()) + "<br>&nbsp</html>";
    return s;
}

其中 time_avg()msec2bpm 都返回 double 值(绝不是 Double 值)。

无论区域设置如何,我怎样才能使这项工作正常进行?任何帮助将不胜感激。

最佳答案

您似乎正在使用

Double.valueOf(new DecimalFormat("#.####").format(dt).toString())

将数字四舍五入到小数点后 4 位,但这对我来说看起来像是一个 hack,并且由于区域化设置而失败(匈牙利可能使用小数逗号,而不是小数点。)

因此,可以使用类似以下的方法来进行 double :

rounded = Math.round(original * 10000)/10000.0;

并且,如果您想创建一个四舍五入到小数点后 4 位的字符串,请使用 String.format()

String.format("%.4f", original);

关于java - 不同的区域设置会发生 NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14007523/

相关文章:

java - 在java中的给定索引处有效地在ArrayList中添加元素

Java 文本过滤器

java - 尝试构建示例 Red5 Secure 项目,但由于某些依赖项而失败

ios - MonoTouch:无法创建PSTitleValueSpecifier

c# - AppSettings 与 Web.Config 中的项目特定设置

android - NumberFormatException: Invalid int: "8.0dip"only on Galaxy Tab 2

java - HTTP header 变为小写 2

c# - 如何加载用户设置和值

java - 为什么我的 NumberFormatException 没有被我的 try-catch 捕获?

java - 当我在模拟器中打开此 Activity 时,我收到 NumberFormatException 和 NullPointerException。为什么?