0

なぜ使用時と非NumberStyles.Float使用時を指定する必要があるのか​​わかりませんdecimal.Parsedouble.Parse

できます:

var tmp = double.Parse("1e-2");

だがしかし:

var tmp1 = decimal.Parse("1e-2"); 

System.FormatException(Input string was not in a correct format) がスローされるため

var tmp1 = decimal.Parse("1e-2", System.Globalization.NumberStyles.Float);

この行動の背後に正当な理由があるかどうか誰かが教えてくれます

4

1 に答える 1

3

文書化されたとおりに動作しているだけです。からDouble.Parse:

s パラメータは、NumberStyles.Float フラグと NumberStyles.AllowThousands フラグの組み合わせを使用して解釈されます。

NumberStyles.Floatが含まれていることに注意してくださいNumberStyles.AllowExponent

からDecimal.Parse:

パラメータ s は NumberStyles.Number スタイルを使用して解釈されます。

NumberStyles.Number含まれませNumberStyles.AllowExponent

同じ呼び出しが機能した直後に失敗したことを示しているように見える奇妙なスタック トレースを再現できません。

  • Decimal.Parse("1e-2")私にとってはいつも失敗します
  • Decimal.Parse("1e-2", NumberStyles.Float)いつも私のために働く
  • Double.Parse("1e-2")いつも私のために働く
  • Double.Parse("1e-2", NumberStyles.Float)いつも私のために働く

「デフォルト」の数値スタイルが2つの間で異なる理由については、指数ベースの表現が一般的である科学的なシナリオで値double通常使用されるためだと思いますが、値は通常そうではありません。decimal

于 2013-10-14T15:10:40.187 に答える