所以我有一个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();
}
答案 0 :(得分:0)
考虑那些模式>1.0E-4<
或>1.5E-4<
以及RegEx和String替换等等。
答案 1 :(得分:0)
使用XMLPullParser(参考guide)获取双精度值,然后使用here或here描述的技术进行转换,可能会使用正则表达式。
答案 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;
}