[英]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);
}
輸出:每個字符串的double
和BigDecimal
輸出:
3.95E-6
0.00000395
12345.0
12345
DecimalFormat
似乎被小寫e
拋棄了。 根據https://stackoverflow.com/a/13925393/14731,這似乎無法解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.