我需要检查数学表达式是否包含指数值,然后用十进制值替换指数值。
输入:“10993.657030812325 * 8.20681165367255E-05”
输出:“10993.657030812325 * 0.0000820681165367255”
我面临的复杂性是在数学表达式中检测它。
检测正则表达式的正则表达式是:
(([1-9][0-9]*\.?[0-9]*)|(\.[0-9]+))([Ee][+-]?[0-9]+)?
然而,对于整个表达式,它匹配为true,是否有直接解决方法或者我必须将其分解并单独检查。
答案 0 :(得分:0)
提供,指数不是太大(小于99)你可以 使用此代码:
String formula = "10993.657030812325*8.20681165367255E-05";
String pattern = @"(([1-9][0-9]*\.?[0-9]*)|(\.[0-9]+))([Ee][+-]?[0-9]+)";
// Let's change format of each double precision in the formula:
String result = Regex.Replace(formula, pattern, (match) => {
// Simple formating; may be you should use more elaborated one
Double db = Double.Parse(match.Value, CultureInfo.InvariantCulture);
// Now, you should format out the Double db:
// First eliminate exponent (F99 is the maximum possible; F100 won't do)
String St = db.ToString("F99", CultureInfo.InvariantCulture);
// Next eliminate trailing '0'
if (St.IndexOf('.') >= 0)
St = St.TrimEnd('0');
return St.TrimEnd('.');
});
结果是“10993.6570308123 * 0.0000820681165367255”