0

数式に指数値が含まれているかどうかを確認し、指数値を小数値に置き換える必要があります。

入力:「10993.657030812325*8.20681165367255E-05」

出力:「10993.657030812325*0.0000820681165367255」

私が直面している複雑さは、数式内でそれを検出することです。

私が持っている正規表現を検出する正規表現は次のとおりです。

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

ただし、それは式全体に当てはまります。これを解決する直接的な方法はありますか、それとも分解して個別に確認する必要がありますか。

4

1 に答える 1

0

指数が大きすぎない (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」

于 2014-01-09T10:35:12.070 に答える