Sostituire i valori esponenziali per raddoppiare in espressione matematica
-
21-12-2019 - |
Domanda
Devo controllare se un'espressione matematica contiene un valore esponenziale e quindi sostituire il valore esponenziale con il valore decimale.
Input: "10993.657030812325 * 8.2068116536725E-05"
Uscita: "10993.657030812325 * 0.0000820681165367255"
La complessità che sto affrontando è rilevarlo all'interno di un'espressione matematica.
L'espressione regolare che rileva un'espressione regolare che ho è:
(([1-9][0-9]*\.?[0-9]*)|(\.[0-9]+))([Ee][+-]?[0-9]+)?
.
Comunque corrisponda a TRUE per l'intera espressione, è lì diretto per risolvere questo o devo abbatterlo e controllare singolarmente.
Soluzione
Fornendo, quell'esponente non è troppo grande (meno di 99) puoi Utilizzare questo codice:
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('.');
});
.
Il risultato è "10993.6570308123 * 0.0000820681165367255"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow