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 回答