【发布时间】:2017-11-28 20:26:34
【问题描述】:
所以我有一个看起来像这样的 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 文件中读取的,因此字符串中的所有浮点值都需要转换。遗憾的是,我使用的 XML 框架 (SimpleXML) 仅表示科学计数法中的浮点数。
更新: 尝试使用 RegEx 查找浮点值,它可以工作。 “found”将是新转换的小数。我将如何用“found”-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();
}
【问题讨论】:
-
你有什么尝试吗?
-
您可以使用
BigDecimal。例如.String result = new BigDecimal("1.0E-4").toPlainString(); -
@OliverCharlesworth 我知道我可以使用 BigDecimal 转换单个值,但我需要解析整个字符串并将每个浮点数转换为十进制表示法。最初的 XML 字符串也更长,并且在 E-notation 中可能有大约 100 个浮点数需要转换为十进制表示法。不太确定如何进行解析。
-
您确实需要 XPath 来可靠地提取文本值,并且需要
Double.parseDouble()或BigDecimal来进行转换。