C # में नंबर पॉजिटिव या नेगेटिव होने पर मैं कैसे चेक करूं?


206

C # में नंबर पॉजिटिव या नेगेटिव होने पर मैं कैसे चेक करूं?

जवाबों:


210
bool positive = number > 0;
bool negative = number < 0;

18
गरीब पुराने नकारात्मक शून्य के बारे में क्या ?!
ग्रांट क्रॉफ्टन

3
@SimonFischer निश्चित रूप से गणित, कंप्यूटर विज्ञान, नियमित विज्ञान की शाखाएं भी हैं जो एक नकारात्मक और सकारात्मक शून्य का उपयोग करती हैं। उदाहरण के लिए केमिस्ट और भौतिक विज्ञानी कभी-कभी ऐसी संख्या के लिए -0 का उपयोग करेंगे जो नकारात्मक और गोल से शून्य थी। परिभाषाओं का केवल एक संदर्भ में अर्थ होता है। जब आप उन गणितीय परिभाषाओं का इलाज करते हैं जो आपको सिखाई गई थीं, हालांकि वे वास्तव में सार्वभौमिक हैं, तो आप एक अलग गणितीय संदर्भ में समाप्त होने का जोखिम उठाते हैं जहां आप गलत हैं।
वोरोनोई पोपटो

177

बेशक किसी ने वास्तव में सही उत्तर नहीं दिया,

num != 0   // num is positive *or* negative!

4
नहीं, ओपी ने पूछा कि is positive or is negativeनहींis (positive or negative)
T.Todua

0 अभी भी पॉजिटिव
जूड

@ T.Todua मेरा मानना ​​है कि यह मजाक था।
नेग्रांनाइट जूल

83

OVERKILL!

public static class AwesomeExtensions
{
    public static bool IsPositive(this int number)
    {
        return number > 0;
    }

    public static bool IsNegative(this int number)
    {
        return number < 0;
    }

    public static bool IsZero(this int number)
    {
        return number == 0;
    }

    public static bool IsAwesome(this int number)
    {
        return IsNegative(number) && IsPositive(number) && IsZero(number);
    }
}

27
आंतरिक रूप से, यह एक वर्ग को तुरंत लागू करना चाहिए जो ISignDeterminatorएक का उपयोग करके लागू करता है SignDeterminatorFactory
जेसी सी। स्लाइसर

10
अपूर्ण: आपको IsNaN () के लिए भी जाँच करनी चाहिए;
slashmais

3
@slashmais: एक पर int?! आप किस जादुई भूमि C # में काम कर रहे हैं?
जेफ़ येट्स

2
.NET 4.0 के लिए आपको जोड़ना चाहिए IsImaginary
रेयान लुंडी

2
आपको अपने कोड में <सारांश> टिप्पणी जोड़ना चाहिए ताकि यह अधिक विश्वसनीय, सुसंगत, सभ्य, सुलभ, स्थिर, मजबूत, ठोस, सुरक्षित और स्पष्ट हो जाए।
मेमेत ऑलसेन

59

Math.Sign विधि एक रास्ता तय करना है। यह नकारात्मक संख्याओं के लिए -1, सकारात्मक संख्याओं के लिए 1 और शून्य के बराबर मानों के लिए 0 लौटाएगा (अर्थात शून्य का कोई संकेत नहीं है)। डबल और एकल सटीक चर एक अपवाद ( ArithmeticException ) का कारण होगा यदि वे NaN के बराबर होते हैं।


वाह यह पता नहीं था। NaN के लिए क्या होता है?
तन्मय

@ टैनमॉय: ऐसा लगता है कि यह उस मामले में अपवाद फेंक देगा ।
19ov पर gnovice

1
लेकिन फिर उसे जांचना होगा कि क्या Math.Sign का परिणाम सकारात्मक है या नकारात्मक! क्या वह Math.Sign का उपयोग करता है? ;)
एंड्रयूज

3
@AndyC: मैं हास्य का आनंद लिया है, लेकिन वह के रिटर्न मान के खिलाफ समानता तुलना करना चाहिए Math.Sign(क्योंकि यह स्पष्ट रूप से संभावित वापसी मान परिभाषित करता है।)
रोब

मुझे इस प्रश्न के नीचे एक उपयोगी उत्तर खोजने की उम्मीद नहीं थी, लेकिन यह वास्तव में वही है जो मैं खोज रहा था। धन्यवाद।
पॉल

56
num < 0 // number is negative

12
मेरा मानना ​​है कि यह एक शुरुआत है, जिसे हमें मदद करने की कोशिश करनी चाहिए। एक बार जब आप सही तरीके से सीख लेते हैं - तो इस गलत तरीके से जांच करें thedailywtf.com/Articles/…
Lou Franco

1
पहले तो मैं मुख्य पृष्ठ पर सवाल पर विश्वास नहीं कर सका, फिर मैं यहाँ आया ... :) और यह आदमी अकेला नहीं है ... ओह प्रिय :)
slashmais

25

यह उद्योग मानक है:

int is_negative(float num)
{
  char *p = (char*) malloc(20);
  sprintf(p, "%f", num);
  return p[0] == '-';
}

यह C # हालांकि नहीं है
एपिसोड

5
मैंने इसे आजमाया। मेरा कार्यक्रम अंततः स्मृति से बाहर चला गया। क्या आपके कोड में एक रिसाव हो सकता है?
थॉमस टेम्प्लेमैन

4
@ बहुत अच्छी तरह से इस अस्पष्ट रिसाव को देखने के लिए किया गया! यद्यपि मैं मूल पोस्टर के परिचयात्मक वाक्य के अर्थ को बदलते हुए आप पर फिदा हूं। मुझे अभी भी विश्वास है कि इसे उद्योग मानक कहा जाना सही है। इसलिए, इस उत्तर की भावना के साथ रखने के लिए, और मूल पोस्टर के संबंध में, मैंने आपका संपादन वापस कर दिया है, ठीक है?
थॉमस टेम्पेलमैन

4
@Will, क्या मुझे वास्तव में मूल पोस्ट और मेरी टिप्पणियों के बारे में स्पष्ट बताने की आवश्यकता है, जो आपके नहीं होने पर उठ गई? (Spoiler: यह व्यंग्य के साथ करना है, और तुम्हारा नहीं है, जिसका अर्थ है कि आपने मजाक को मार दिया है जो यहां मौजूद है - या क्या आप वास्तव में सोचते हैं कि इस उत्तर को गंभीरता से लिया जाना था ??)
थॉमस टेंपेलमैन

2
वहाँ हम जाते हैं, उलटे जाते हैं, झंडे गाड़ते हैं, और नीचे की ओर जाते हैं। मुझे नहीं पता था कि यह एक मजाक था।
होगा

19

आप युवा और आपके प्रशंसक कम-से-कम संकेत देते हैं।

वापस मेरे दिन में हमें उपयोग करना था Math.abs(num) != num //number is negative!


(यदि यह स्पष्ट नहीं था, तो यह हास्य होना था)
पावरलॉर्ड

2
@Eric: नहीं, क्योंकि यह एक फेंक देते हैं OverflowException, तो numहै MinValueमें पारित हो जाता है जो कुछ भी प्रकार के लिए ( Int16, Int32, Int64)। अस्थायी बिंदु मानों के लिए परिणाम और भी बदतर हैं, जहां वे भी हो सकते हैं NaN, चूंकि NaN != NaN
पॉवरलॉर्ड


9

मूल निवासी प्रोग्रामर का संस्करण। छोटे-एंडियन सिस्टम के लिए व्यवहार सही है।

bool IsPositive(int number)
{
   bool result = false;
   IntPtr memory = IntPtr.Zero;
   try
   {
       memory = Marshal.AllocHGlobal(4);
       if (memory == IntPtr.Zero)
           throw new OutOfMemoryException();

       Marshal.WriteInt32(memory, number);

       result = (Marshal.ReadByte(memory, 3) & 0x80) == 0;
   }
   finally
   {
       if (memory != IntPtr.Zero)
           Marshal.FreeHGlobal(memory);
   }
   return result;
}

इसका कभी भी इस्तेमाल न करें।


9
"क्या यह कभी उपयोग नहीं करते हैं"? लेकिन यह एंटरप्राइज़-गुणवत्ता कोड, एंटरप्राइज़ सॉफ़्टवेयर के लिए एकदम सही है! आप भूल रहे हैं IsPositiveChecker, IsPositiveCheckerInterface, IsPositiveCheckerFactory, और IsPositiveCheckerFactoryInterface, हालांकि।
टिम Timस

1
बस इसका उपयोग मेरे हैलो वर्ल्ड कंसोल ऐप में किया गया है। 10/10 इसे फिर से करेगा।
वाहिद अमीरी

आपको कोष्ठक का एक सेट याद आ रहा है क्योंकि '&' में '==' की तुलना में कम पूर्वता है, इसलिए आपको result = (Marshal.ReadByte(memory, 3) & 0x80) == 0;इसके बजाय होना चाहिए । इसके अलावा, आपके पास return result;अंत में कहीं होना चाहिए ताकि यह वास्तव में परिणाम लौटाए।
ड्रैगनट्रेज

6
if (num < 0) {
  //negative
}
if (num > 0) {
  //positive
}
if (num == 0) {
  //neither positive or negative,
}

या "और अगर" का उपयोग करें


6

32-बिट हस्ताक्षरित पूर्णांक के लिए, जैसे कि System.Int32, intC # में aka :

bool isNegative = (num & (1 << 31)) != 0;

5
public static bool IsNegative<T>(T value)
   where T : struct, IComparable<T>
{
    return value.CompareTo(default(T)) < 0;
}

5

आपको बस यह तुलना करनी होगी कि क्या मूल्य और उसका पूर्ण मूल्य बराबर है:

if (value == Math.abs(value))
    return "Positif"
else return "Negatif"

5
bool isNegative(int n) {
  int i;
  for (i = 0; i <= Int32.MaxValue; i++) {
    if (n == i) 
      return false;
  }
  return true;
}

3
int j = num * -1;

if (j - num  == j)
{
     // Num is equal to zero
}
else if (j < i)
{
      // Num is positive
}
else if (j > i) 
{
     // Num is negative
}

1

यह कोड प्रदर्शन को बेहतर बनाने के लिए SIMD के निर्देशों का लाभ उठाता है।

public static bool IsPositive(int n)
{
  var v = new Vector<int>(n);
  var result = Vector.GreaterThanAll(v, Vector<int>.Zero);
  return result;
}

0

पहला पैरामीटर EAX रजिस्टर में संग्रहीत किया जाता है और परिणाम भी।

function IsNegative(ANum: Integer): LongBool; assembler;
asm
   and eax, $80000000
end;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.