指数値を数学的に倍に置き換えます
-
21-12-2019 - |
質問
数学的表現に指数値が含まれているかどうかを確認してから、指数値を10進数の値に置き換える必要があります。
入力: "10993.657030812325 * 8"
出力: "10993.657030812325"
直面している複雑さは、数学的表現の中で検出することです。
私が持っている正規表現を検出する正規表現:
(([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」
です。所属していません StackOverflow