将String解析为Double时保持科学记数法

时间:2018-04-13 16:44:53

标签: java

我正在使用Double.parseDouble()将用户输入从字符串转换为科学记数法。但我注意到这只适用于以下范围:

value with exponent number >=7 (ie: 1e7) for positive exponent or
value with exponent number <= -4 (ie: 1e-4) for negative exponent.

以下代码转换         1e7正确为1e7但是         1e4错误地为10000

public Double convert(String value){
    DecimalFormat df = new DecimalFormat("0.##E0");
    String formattedVal = df.format(value);      
    return Double.parseDouble(formattedVal);
}

1 个答案:

答案 0 :(得分:1)

double没有内在格式,只是位。你看到的是在你的Double上调用toString()的结果。默认情况下,Double.toString()仅在某些情况下使用科学记数法。如果要将特定符号转换为String以进行显示,请再次使用DecimalFormat。

public Double convert(String value){
    DecimalFormat df = new DecimalFormat("0.##E0");
    String formattedVal = df.format(value);      
    return Double.parseDouble(formattedVal);
}

DecimalFormat df = new DecimalFormat("0.##E0");
Double d = convert("1e4");
String dAsString = df.format(d);
System.out.println(dAsString);