6

次のコードがあります。

NumberFormat numberInstance = NumberFormat.getNumberInstance();
System.out.println(numberInstance.parse("6.543E-4"));
System.out.println(numberInstance.parse("6.543e-4"));

次の出力が生成されます。

6.543E-4
6.543

NumberFormat を微調整して、大文字と小文字の両方の E を指数区切り記号として認識する方法はありますか? 最善の回避策はありますか? 最初に入力に対して toUpper() を実行するよりも良いことはありますか?

4

2 に答える 2

7

答えは「いいえ」です。直接ではありません。

入力に直接使用toUpperCase()すると、一貫性を確保するためのわずかなコーディング オーバーヘッドが発生しますが、次の回避策があります。

NumberFormat numberInstance = new NumberFormat() {
    @Override
    public Number parse(String str) {
        return super.parse(str.toUpperCase());
    }
};

parse()これは、メソッドをオーバーライドして、その実装に大文字と小文字を区別しない匿名クラスです。

于 2012-12-18T02:21:52.870 に答える
0

少なくとも Double.parseDouble は両方を受け入れます

    System.out.println(Double.parseDouble("6.543e-4"));
    System.out.println(Double.parseDouble("6.543E-4"));

出力

6.543E-4
6.543E-4

NumberFormat については、次のように E を e に変更できます。

    DecimalFormat nf = (DecimalFormat)NumberFormat.getNumberInstance();
    DecimalFormatSymbols s = new DecimalFormatSymbols();
    s.setExponentSeparator("e");
    nf.setDecimalFormatSymbols(s);
    System.out.println(nf.parse("6,543e-4"));

出力

6.543E-4

しかし、今では E を受け入れません :(

于 2012-12-18T06:07:44.537 に答える