DecimalFormat.parse()忽略指数

时间:2018-02-27 22:00:00

标签: java parsing bigdecimal

我正在尝试将包含小数的字符串(可能使用或不使用科学记数法)解析为BigDecimal

DecimalFormat.parse()似乎适用于不使用科学记数法的数字,但3.95e-06被解析为双3.95(指数被忽略)。

我熟悉BigDecimal(String)构造函数,但DecimalFormat为我提供了更灵活的解析格式(例如货币)。

使用或不使用指数表示法将小数位分析到BigDecimal的适当方法是什么?

2 个答案:

答案 0 :(得分:1)

显然DecimalFormat预计资金E 小写e,每this answer

但你总是可以大写字符串。然后,您可以致电setParseBigDecimal并将其设置为true,以便parse返回BigDecimal

测试科学和常规符号:

public static void main(String[] args) throws Exception
{
    test("3.95e-06");
    test("12345");
}

private static void test(String line) throws Exception {
    DecimalFormat bdf = new DecimalFormat();
    double d = bdf.parse(line.toUpperCase()).doubleValue();
    System.out.println(d);
    bdf.setParseBigDecimal(true);
    BigDecimal test = (BigDecimal) bdf.parse(line.toUpperCase());
    System.out.println(test);
}

输出:每个字符串的double然后BigDecimal输出:

3.95E-6
0.00000395
12345.0
12345

答案 1 :(得分:0)

=MMULT(E3:L4,TRANSPOSE(E2:L2)) 似乎被小写DecimalFormat抛弃了。根据{{​​3}},这似乎无法解决。