簡體   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