我正在尝试将包含小数的字符串(可能使用或不使用科学记数法)解析为BigDecimal
。
DecimalFormat.parse()
似乎适用于不使用科学记数法的数字,但3.95e-06
被解析为双3.95
(指数被忽略)。
我熟悉BigDecimal(String)
构造函数,但DecimalFormat
为我提供了更灵活的解析格式(例如货币)。
使用或不使用指数表示法将小数位分析到BigDecimal
的适当方法是什么?
答案 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}},这似乎无法解决。