0

私はこのコードを持っています:

public double stringToDouble(String s) {

       NumberFormat nf = NumberFormat.getInstance(Locale.getDefault());

    try {

        return nf.parse(s).doubleValue();
    } catch (java.text.ParseException e) {
        return 0.0;
    }
}

正常に動作しますが、60.0のようないくつかの値では600.0になり、理由はわかりません。60では60.0になります。

助言がありますか?前もって感謝します

4

2 に答える 2

0

OK、答えはこのコードを使用しています:

public double stringToDouble(String s) {

       NumberFormat nf = NumberFormat.getInstance(Locale.getDefault());
    nf.setGroupingUsed(false);
    ParsePosition parsePosition = new ParsePosition(0);
    Number n = nf.parse(s, parsePosition);
    if (n == null || parsePosition.getErrorIndex() >= 0 || parsePosition.getIndex() < s.length())
    {
      /* not a valid number */
    }
    return n.doubleValue();
}

Double.parseDouble();の代わりにこれを使用してください。

于 2012-09-10T13:30:22.763 に答える
0

これは、マシン(JVM)のデフォルトのロケールがドットをグループ化文字(1.000.000,00のような3桁のグループ化)として解釈し、おそらく小数点記号がコンマ文字であるために発生します。

私はあなたのコードを私のマシンでデフォルトの英国のロケールで実行します

System.out.println(stringToDouble("60.0")); System.out.println(stringToDouble("60")); System.out.println(stringToDouble("60,0"));

それは印刷します: 60.0 そして 60.0 そして 600.0

移植性のために、デフォルトではなく特定のロケールを設定します。

于 2014-01-21T14:43:36.127 に答える