سؤال

لدي الكود التالي ...

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. لتحديد ما إذا كانت القيمة ليست رقما. لا يمكن تحديد ما إذا كانت القيمة ليست رقما لا يقارنها بقيمة أخرى تساوي نان.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top