0

私は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ではない)値を返します。

地域の設定に関係なく、どうすればこれを機能させることができますか?どんな助けでもいただければ幸いです。

4

3 に答える 3

1

使用しているようです

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

数値を小数点以下4桁に丸めますが、これは私にはハックのように見え、地域化の設定が原因で失敗します(ハンガリーはおそらく小数点ではなく小数点カンマを使用します)。

したがって、代わりに次のようなものを使用してダブルを丸めます。

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

また、小数点以下4桁に二重に丸められた文字列を作成する場合は、String.format()を使用します。

String.format("%.4f", original);
于 2012-12-22T23:46:31.003 に答える
1

スキップする必要があるようですDouble.valueOf

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;
}
于 2012-12-22T23:56:20.620 に答える
0

なぜあなたはに、そして再びに変換Stringするのですか?このようにしてください:DoubleString

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;
}
于 2012-12-22T23:56:56.377 に答える