将String中的所有浮点值从科学计数法转换为十进制表示法

时间:2017-07-10 21:49:56

标签: java android

所以我有一个xml字符串,如下所示:

<CONFIG><Setting1><o1>44</o1><o2>1.0E-4</o2><o3>955</o3><o4>1.5E-4</o4><o5>Surname</o5></setting1>....</CONFIG>

我如何将字符串中的每个浮点数从科学概念转换为十进制符号?

编辑:为了澄清,我不希望只将单个浮点值从科学转换为十进制。从我从pojo序列化的xml文件中读取String,因此需要转换String中的所有浮点值。可悲的是,我使用的XML-Framework(SimpleXML)仅代表科学记数法中的浮点数。

更新: 尝试使用RegEx查找浮点值,它可以工作。 &#34;实测&#34;将是新转换的小数。我如何用&#34;找到&#34; -String替换每个找到的模式?

    public static void ScientificToDecimal(String text){
    String found;
    Pattern pattern = Pattern.compile("\\d+[.]\\d+E[+-]\\d");
    Matcher matcher = pattern.matcher(text);
    while(matcher.find()){
        found = new BigDecimal(matcher.group()).toPlainString();
        Log.i("Converted: ", matcher.group() + " to " + found);
        }
    }

UPDATE2 :对我来说效果不错。

    public static String scientificToDecimal(String text){
    String replacementText = "";
    StringBuffer sb = new StringBuffer();

    Pattern pattern = Pattern.compile("\\d+[.]\\d+E[+-]\\d");
    Matcher matcher = pattern.matcher(text);

    while(matcher.find()){

        replacementText = new BigDecimal(matcher.group()).toPlainString();
        matcher.appendReplacement(sb,replacementText);
        Log.i("Converted: ", matcher.group() + " to " + replacementText);
    }
    matcher.appendTail(sb);

    return sb.toString();
    }

3 个答案:

答案 0 :(得分:0)

考虑那些模式>1.0E-4<>1.5E-4<以及RegEx和String替换等等。

答案 1 :(得分:0)

使用XMLPullParser(参考guide)获取双精度值,然后使用herehere描述的技术进行转换,可能会使用正则表达式。

答案 2 :(得分:0)

只是为了增强处理以下场景

a)1.0E-4 b)1.0E4 c)1.0E + 4

public static String scientificToDecimal(String text){

    String out = "";
    boolean found = false;
    String replacementText = "";
    StringBuffer sb = new StringBuffer();

    /*
     * 5.0E4
     */
    Pattern pattern = Pattern.compile("\\d+[.]\\d+E\\d");
    Matcher matcher = pattern.matcher(text);
    while(matcher.find()){

        replacementText = new BigDecimal(matcher.group()).toPlainString();
        matcher.appendReplacement(sb,replacementText);
        found = true;
        // System.out.println("Converted: " + matcher.group() + " to " + replacementText);
    }
    if ( found )
    {
        matcher.appendTail(sb);
        out = sb.toString();
        return out;
    }

    /*
     * 5.0E-4
     */
    pattern = Pattern.compile("\\d+[.]\\d+E[-+]\\d");
    matcher = pattern.matcher(text);
    while(matcher.find()){

        replacementText = new BigDecimal(matcher.group()).toPlainString();
        matcher.appendReplacement(sb,replacementText);
        // System.out.println("Converted: " + matcher.group() + " to " + replacementText);
    }
    matcher.appendTail(sb);
    out = sb.toString();
    return out;
}