Замените экспоненциальные значения в двойное в математическом выражении

StackOverflow https://stackoverflow.com//questions/21017005

Вопрос

Мне нужно проверить, содержит ли математическое выражение эффективности экспоненциального значения, а затем заменить экспоненциальное значение с десятичным значением.

Вход: "10993.657030812325 * 8.20681165367255E-05"

Выход: "10993.657030812325 * 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.6570308123 * 0,0000820681165367255"

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top