将String中的指数值转换为十进制表示形式,而不使用指数表示法

时间:2016-04-27 08:28:22

标签: java string decimal implicit-conversion exponential

我有一个像这样的字符串构建:

String str = "m -263.61653,-131.25745 c -7.5e-4,-1.04175 0.71025,-1.90875 1.67025,-2.16526"

-7.5e-4 我想改成 -0.00075

我想将指数值更改为十进制值以获得类似这样的内容:

String str = "m -263.61653,-131.25745 c -0.00075,-1.04175 0.71025,-1.90875 1.67025,-2.16526"

我有很多像这样的字符串来检查和转换。

我真的不知道如何有效地改变指数值,因为所有这些值都在一个字符串中......

如果你知道一种有效而快速的方法,请告诉我。

3 个答案:

答案 0 :(得分:3)

您可以使用toPlainString类中的方法BigDecimal

String num = "7.5e-4";
new BigDecimal(num).toPlainString();//output 0.00075

答案 1 :(得分:1)

这样的事情应该可以胜任:

public static void main(String[] args) {
    String patternStr = "[0-9.-]*e[0-9.-]*";
    String word = "m -263.61653,-131.25745 c -7.5e-4,-1.04175 0.71025,-1.90875 1.67025,-2.16526";
    Pattern pattern = Pattern.compile(patternStr);
    Matcher matcher = pattern.matcher(word);
    if (matcher.find()) {
        Double d = Double.valueOf(matcher.group());
        System.out.println(word.replaceAll(patternStr, BigDecimal.valueOf(d).toPlainString()));
    }

}

输出将是:

m -263.61653,-131.25745 c -0.00075,-1.04175 0.71025,-1.90875 1.67025,-2.16526

当然如果String上有多个指数,你将不得不稍微调整一下。

答案 2 :(得分:0)

您可以使用Double.parseDouble进行解析,然后使用String.format()进行格式化:

    double d = Double.parseDouble("-7.5e-4");
    String s = String.format("%f", d);