我需要检查数学表达式是否包含指数值,然后用十进制值替换指数值。

输入:“10993.657030812325 * 8.20681165367255E-05”

输出:“10993.657032325 * 0.0000820681165367255”

我所面临的复杂性是在数学表达式中检测它。

检测我所拥有的正则表达式的正则表达式是:

(([1-9][0-9]*\.?[0-9]*)|(\.[0-9]+))([Ee][+-]?[0-9]+)?
. 然而,它与整个表达式匹配,是否有直接解决此问题或者我必须将其分解并单独检查。

有帮助吗?

解决方案

提供,那个指数不是太大(少于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.65703123 * 0.000082068123 * 0.0000820681165367255”

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top