Pergunta

Eu preciso verificar se uma expressão matemática que contém um valor exponencial e, em seguida, substitua o valor exponencial com valor decimal.

Entrada :"10993.657030812325*8.20681165367255 E-05"

Resultado :"10993.657030812325*0.0000820681165367255"

A complexidade que estou enfrentando é detectá-lo dentro de uma expressão matemática.

A expressão regular que detecta uma expressão regular que eu tenho é:

(([1-9][0-9]*\.?[0-9]*)|(\.[0-9]+))([Ee][+-]?[0-9]+)?

No entanto, o que corresponde a verdadeiro para toda a expressão, existe uma forma direta de resolver este ou tenho de quebrá-lo para baixo e verificar individualmente.

Foi útil?

Solução

Fornecer, que é o expoente não é muito grande (menos de 99) você pode use este código:

  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('.'); 
  });

O resultado é "10993.6570308123*0.0000820681165367255"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top