首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NumberFormatException在不同的区域设置下发生

NumberFormatException在不同的区域设置下发生
EN

Stack Overflow用户
提问于 2012-12-23 07:41:38
回答 3查看 334关注 0票数 0

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

如果通过控制面板将区域设置格式设置为匈牙利语(系统默认值),我会收到此异常,但如果我将其设置为英语格式,则可以完美地工作。我也在一个虚拟的Mandriva上工作,在那里我首先开发了这个程序。

以下是导致问题的代码片段:

代码语言:javascript
复制
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都返回双精度(不是双精度)值。

我如何才能在不考虑区域设置的情况下使其工作?任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-23 07:46:31

看起来你在用

代码语言:javascript
复制
Double.valueOf(new DecimalFormat("#.####").format(dt).toString())

将一个数字四舍五入到4位小数点,但在我看来这是一个技巧,由于区域化设置(匈牙利可能使用小数点逗号,而不是小数点),它将失败。

因此,取而代之的是使用类似以下内容的循环加倍:

代码语言:javascript
复制
rounded = Math.round(original * 10000)/10000.0;

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

代码语言:javascript
复制
String.format("%.4f", original);
票数 1
EN

Stack Overflow用户

发布于 2012-12-23 07:56:21

看起来你应该跳过Double.valueOf

代码语言:javascript
复制
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: " +
        new DecimalFormat("#.####").format(dt) + " ms<br>" +
        "Average BPM: " + new DecimalFormat("#.####").format(bpm) + "<br>&nbsp</html>";
    return s;
}
票数 1
EN

Stack Overflow用户

发布于 2012-12-23 07:56:56

为什么要先将String转换为Double,然后再转换为String?如下所示:

代码语言:javascript
复制
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: "+
        new DecimalFormat("#.####").format(dt).toString()+" ms<br>"+
                "Average BPM: "+Double.valueOf(new DecimalFormat("#.####").format(bpm).toString())+"<br>&nbsp</html>";
    return s;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14007523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档