[英]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.