Замените экспоненциальные значения на удвоенные в математическом выражении
Мне нужно проверить, содержит ли математическое выражение экспоненциальное значение, а затем заменить экспоненциальное значение десятичным значением.
Ввод:"10993.657030812325*8.20681165367255E-05"
Выходные данные: "10993,657030812325 * 0,0000820681165367255"
Сложность, с которой я сталкиваюсь, заключается в обнаружении этого внутри математического выражения.
Регулярное выражение, которое обнаруживает регулярное выражение, которое я имею:
(([1-9][0-9]*\.?[0-9]*)|(\.[0-9]+))([Ee][+-]?[0-9]+)?
Тем не менее, это соответствует истине для всего выражения, есть ли прямой способ решить это или мне нужно разбить его и проверить индивидуально.
1 ответ
Решение
При условии, что показатель степени не слишком велик (менее 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"