繁体   English   中英

DecimalFormat.parse() 忽略指数

[英]DecimalFormat.parse() ignoring exponents

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

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

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

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

显然,根据此答案DecimalFormat需要大写的E不是小写的e

但是您始终可以将字符串大写。 然后您可以调用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);
}

输出:每个字符串的doubleBigDecimal输出:

3.95E-6
0.00000395
12345.0
12345

DecimalFormat似乎被小写e抛弃了。 根据https://stackoverflow.com/a/13925393/14731,这似乎无法解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM