27

Googleで検索した後、以下のコードを使用してもコンパイルできません:

decimal h = Convert.ToDecimal("2.09550901805872E-05");   

decimal h2 = Decimal.Parse(
  "2.09550901805872E-05", 
   System.Globalization.NumberStyles.AllowExponent);
4

6 に答える 6

45

あなたも追加する必要がありNumberStyles.AllowDecimalPointます:

Decimal.Parse("2.09550901805872E-05", NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint);

MSDNはそれについて明確です:

数値文字列を指数表記できることを示します。AllowExponent フラグを使用すると、解析された文字列に "E" または "e" 文字で始まり、その後にオプションの正または負の符号と整数が続く指数を含めることができます。つまり、nnnExx、nnnE+xx、および nnnE-xx の形式の文字列を正常に解析します。 仮数部または仮数部に小数点または記号を使用することはできません。文字列内のこれらの要素を解析できるようにするには、AllowDecimalPoint および AllowLeadingSign フラグを使用するか、これらの個々のフラグを含む複合スタイルを使用します。

于 2013-07-11T07:39:52.373 に答える
5

使用するSystem.Globalization.NumberStyles.Any

decimal h2 = Decimal.Parse("2.09550901805872E-05", System.Globalization.NumberStyles.Any);
于 2013-07-11T07:46:50.090 に答える
4

(文字列内の)小数点記号は文化によって異なる可能性があるため 、使用する方が安全です。この小数点記号 ( )を許可することを忘れないでください。"."InvariantCultureNumberStyles.Float

  decimal h = Decimal.Parse(
    "2.09550901805872E-05", 
     NumberStyles.Float | NumberStyles.AllowExponent,
     CultureInfo.InvariantCulture);

おそらく、より便利なコードは、次を使用する場合NumberStyles.Anyです。

  decimal h = Decimal.Parse(
    "2.09550901805872E-05", 
     NumberStyles.Any, 
     CultureInfo.InvariantCulture);
于 2013-07-11T07:46:21.080 に答える