36

私は次のコードを持っています...

if (Price_Foreign != Double.NaN)
{
   output.Append(spacer);
   output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}

どの出力:

NaN USD

何を与える?

Double.NaN を使用して、値が存在しないことを示し、出力すべきではありません。

4

4 に答える 4

61

IsNaNおそらく、静的関数を探していますか?

次のようなことを試してください:

if (!Double.IsNaN(Price_Foreign))
{
   output.Append(spacer);
   output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}
于 2009-02-17T19:05:30.357 に答える
34

IEEE 754 浮動小数点標準では、NaN と NaN を比較すると常にfalse が返されると規定されています。これを行う必要がある場合は、 を使用してくださいDouble.IsNaN()

しかし、これはあなたがやろうとしていることを行うための最良の方法ではありません. double は正確ではなく、ここで価格を表すために使用しています。ある時点で、あなたも価格を平等に比較したいと思うでしょう。浮動小数点の等価性に依存できないため、これは機能しません。

double を使用しようとするのではなく、(等値比較をサポートする) これらの値に何らかの整数型を使用することを検討する必要があります。double は科学的な問題用です。金融のためではありません。

于 2009-02-17T19:05:40.200 に答える
9

Double.NaNそれ自身でさえも、何とも等しくありません。

.NET Framework クラス ライブラリ ドキュメントのDouble.NaN フィールドを参照してください。

IsNaNを使用して、値が数値ではないかどうかを判断します。NaN に等しい別の値と比較して、値が数値ではないかどうかを判断することはできません。

于 2009-02-17T19:06:09.420 に答える
8

背景情報として:IsNaN()メソッドが行うことはreturn v != v;

于 2010-05-24T14:47:31.800 に答える