سؤال
لدي الكود التالي ...
if (Price_Foreign != Double.NaN)
{
output.Append(spacer);
output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}
ما النواتج:
NaN USD
ما يعطي؟
أنا أستخدم Double.nan للإشارة إلى أن القيمة غير موجودة، ولا ينبغي أن تكون إخراج.
المحلول
ربما كنت تبحث عن IsNaN
وظيفة ثابتة؟
جرب شيئا مثل هذا:
if (!Double.IsNaN(Price_Foreign))
{
output.Append(spacer);
output.Append(String.Format("{0,-10:C} USD",Price_Foreign));
}
نصائح أخرى
ال IEEE 754 معيار النقطة العائمة تنص على أن مقارنة نان مع نان سوف دائما عودة كاذبة. إذا كان يجب عليك القيام بذلك، فاستخدم Double.isnan ().
ولكن هذه ليست هي أفضل طريقة للقيام بما تحاول القيام به. الزوجي ليست دقيقة، وأنت تستخدمها لتمثيل الأسعار هنا. أراهن أنه في مرحلة ما، سوف ترغب في مقارنة الأسعار للمساواة أيضا. هذا لن يعمل، ل لا يمكنك الاعتماد على المساواة بين النقاط العائمة.
يجب عليك حقا أن تنظر في استخدام بعض أنواع عدد صحيح لهذه القيم (التي تدعم مقارنة المساواة) بدلا من محاولة استخدام الزوجي. الزوجي هي للمشاكل العلمية؛ ليس للتمويل.
كمعلومات أساسية: ما IsNaN()
الطريقة لا return v != v;
Double.NaN
لا يساوي أي شيء، وليس حتى نفسه.
انظر Double.nan Field. في وثائق مكتبة Class .NET Framework:
يستخدم isnan. لتحديد ما إذا كانت القيمة ليست رقما. لا يمكن تحديد ما إذا كانت القيمة ليست رقما لا يقارنها بقيمة أخرى تساوي نان.