Math.Floor (और Math.Truncate) के बीच अंतर


422

बीच क्या अंतर है Math.Floor()और Math.Truncate().NET में?


8
उदा। Math.Floor (5.4) = 5 Math.Truncate (5.4) = 5
सुब्रमणि

3
तुम सच में 10 साल के बाद यह जरूरत है? lol
L_Church

1
क्यों 10 साल बाद एक इनाम है? पहले से ही कई जवाब हैं। क्या मुझे कुछ याद आ रहा है?
डबरा

3
इस व्यक्ति ने केवल 1 प्रश्न पूछा और तब से साइट छोड़ दी। मुझे लगता है कि यह सब वह हमेशा जानना चाहता था ..: डी
निकोस

जवाबों:


484

Math.Floorराउंड डाउन, Math.Ceilingराउंड अप, और Math.Truncateराउंड शून्य की ओर। इस प्रकार, Math.Truncateकी तरह है Math.Floorसकारात्मक संख्या के लिए, और इस तरह के Math.Ceilingऋणात्मक संख्याओं के लिए। यहाँ संदर्भ है

पूर्णता के Math.Roundलिए, निकटतम पूर्णांक तक गोल। यदि संख्या दो पूर्णांकों के बीच बिल्कुल मध्य है, तो यह एक की ओर भी घूमता है। संदर्भ।

यह भी देखें: पैक्स डियाब्लो के जवाब । अत्यधिक सिफारिशित!


31
@ क्रिस, मैं आपको राउंड के अपने विवरण को ठीक करने का सुझाव देता हूं, राउंड (AwayFromZero और ToEven) के दो तरीके हैं और यह निकटतम पूर्णांक तक गोल नहीं करता है क्योंकि यह भिन्नात्मक राउंडिंग भी कर सकता है।
paxdiablo

1
तो बस मूल प्रश्न पर एक संक्षिप्त जोड़ - क्या Math.Truncate और बस एक दशमलव या डबल int करने के लिए अंतर के बीच अंतर है? क्या यह भी सिर्फ शून्य की ओर गोल नहीं होगा?
नोआम गल

8
कब (int)myDoubleसे अलग है (int)Math.Truncate(myDouble)?
एमपीएन

2
गणित वर्ग में क्या (int) बराबर है?
लेई यांग

386

MSDN विवरण के लिए इन लिंक का अनुसरण करें:

  • Math.Floor, जो नकारात्मक अनंत की ओर चक्कर लगाता है।
  • Math.Ceiling, जो सकारात्मक अनंत की ओर चक्कर लगाता है।
  • Math.Truncate, जो शून्य की ओर ऊपर या नीचे गोल होता है।
  • Math.Round, जो निकटतम पूर्णांक या दशमलव स्थानों की निर्दिष्ट संख्या के लिए गोल है। आप व्यवहार को निर्दिष्ट कर सकते हैं यदि यह दो संभावनाओं के बीच समान रूप से समान है, जैसे कि गोलाई ताकि अंतिम अंक भी (" Round(2.5,MidpointRounding.ToEven)" 2 बन रहा है) या इसलिए कि यह शून्य से दूर है (" Round(2.5,MidpointRounding.AwayFromZero)" 3)।

निम्नलिखित आरेख और तालिका मदद कर सकती है:

-3        -2        -1         0         1         2         3
 +--|------+---------+----|----+--|------+----|----+-------|-+
    a                     b       c           d            e

                       a=-2.7  b=-0.5  c=0.3  d=1.5  e=2.8
                       ======  ======  =====  =====  =====
Floor                    -3      -1      0      1      2
Ceiling                  -2       0      1      2      3
Truncate                 -2       0      0      1      2
Round (ToEven)           -3       0      0      2      3
Round (AwayFromZero)     -3      -1      0      2      3

ध्यान दें कि Roundयह बहुत अधिक शक्तिशाली है जितना लगता है, बस इसलिए कि यह एक विशिष्ट संख्या में दशमलव स्थानों के लिए गोल हो सकता है। अन्य सभी हमेशा शून्य दशमलव तक गोल करते हैं। उदाहरण के लिए:

n = 3.145;
a = System.Math.Round (n, 2, MidpointRounding.ToEven);       // 3.14
b = System.Math.Round (n, 2, MidpointRounding.AwayFromZero); // 3.15

अन्य कार्यों के साथ, आपको समान प्रभाव प्राप्त करने के लिए गुणा / भाग की चाल का उपयोग करना होगा:

c = System.Math.Truncate (n * 100) / 100;                    // 3.14
d = System.Math.Ceiling (n * 100) / 100;                     // 3.15

7
पैक्स, मुझे लगता है कि आपके साथ एक गलती हुई है: राउंड (अवेफ्रोमजेरो) -3 -2 1 2 3 मैथ राउंड। 0.0 आदि ..
dtroy

1
धन्यवाद, @dtroy, मुझे कभी भी उस मोड का उपयोग करने की आवश्यकता नहीं थी और, जबकि मैंने इसे सही ढंग से प्रलेखित किया था यदि पाठ, मुझे पूरी तरह से उदाहरण गलत मिले। उम्मीद है कि अब तय हो गया है।
पाक्सिडाब्लो

इस तरह के एक पुराने सवाल पर टिप्पणी करने के लिए क्षमा करें, लेकिन मुझे पूछना होगा: आप दो दशमलव स्थानों पर "ToEven" को कैसे गोल कर सकते हैं? निश्चित रूप से विषम और यहां तक ​​कि केवल पूर्णांकों तक ही लागू होते हैं?
रिचीबन

4
@ रिचिबन, गोल संख्या में evenअंतिम अंक की संपत्ति के रूप में सोचते हैं , न कि अर्थ के रूप में पूरी संख्या दो की एक से अधिक होनी चाहिए। वैसे, खेद है कि आपको वापस आने में इतना समय लगा, आशा है कि आप मेरी प्रतिक्रिया की प्रतीक्षा में बैठे नहीं थे :-)
paxdiablo

62

Math.Floor() नकारात्मक अनंत की ओर गोल

Math.Truncate गोल या शून्य की ओर।

उदाहरण के लिए:

Math.Floor(-3.4)     = -4
Math.Truncate(-3.4)  = -3

जबकि

Math.Floor(3.4)     = 3
Math.Truncate(3.4)  = 3

2
संक्षिप्त उदाहरण के साथ अच्छी और सरल व्याख्या, इसे इस प्रश्न के उत्तर के रूप में चिह्नित किया जाना चाहिए।
nivs1978

44

कुछ उदाहरण:

Round(1.5) = 2
Round(2.5) = 2
Round(1.5, MidpointRounding.AwayFromZero) = 2
Round(2.5, MidpointRounding.AwayFromZero) = 3
Round(1.55, 1) = 1.6
Round(1.65, 1) = 1.6
Round(1.55, 1, MidpointRounding.AwayFromZero) = 1.6
Round(1.65, 1, MidpointRounding.AwayFromZero) = 1.7

Truncate(2.10) = 2
Truncate(2.00) = 2
Truncate(1.90) = 1
Truncate(1.80) = 1

29

Math.floorबाईं ओर
Math.ceilsliiiide ... दाईं ओर
Math.truncatesliiiide ... criiiiss crooooss (मंजिल / छत हमेशा 0 की ओर)
Math.roundcha चा, असली चिकनी ... (निकटतम पक्ष में जाएं)

चलो काम पर जाएं! (⌐ □ _ □)

बाईं ओर ... Math.floor
अब वापस ले लो y'all ... --
दो हॉप इस बार ...-=2

हर कोई ताली बजाता है hands

आप कितना गिर सकते हैं? क्या आप नीचे जा सकते हैं? सभी तरह से floor?

if (this == "wrong")
    return "i don't wanna be right";

Math.truncate(x)जैसा है वैसा ही है int(x)
एक सकारात्मक या नकारात्मक अंश को हटाकर, आप हमेशा 0 की ओर बढ़ रहे हैं।


हाहाहा अच्छा रीमिक्स।
डैनियल का कहना है कि मोनिका

26

वे सकारात्मक संख्याओं के साथ कार्यात्मक रूप से समतुल्य हैं। अंतर यह है कि वे नकारात्मक संख्याओं को कैसे संभालते हैं।

उदाहरण के लिए:

Math.Floor(2.5) = 2
Math.Truncate(2.5) = 2

Math.Floor(-2.5) = -3
Math.Truncate(-2.5) = -2

MSDN लिंक: - Math.Floor Method - Math.Truncate मेथड

मैथ के पीएस खबरदार। यह वह नहीं हो सकता है जो आप उम्मीद करते हैं।

"मानक" राउंडिंग परिणाम का उपयोग करने के लिए:

float myFloat = 4.5;
Console.WriteLine( Math.Round(myFloat) ); // writes 4
Console.WriteLine( Math.Round(myFloat, 0, MidpointRounding.AwayFromZero) ) //writes 5
Console.WriteLine( myFloat.ToString("F0") ); // writes 5

24

इसका प्रयास करें, उदाहरण:

Math.Floor () बनाम Math.Truncate ()

Math.Floor(2.56) = 2
Math.Floor(3.22) = 3
Math.Floor(-2.56) = -3
Math.Floor(-3.26) = -4

Math.Truncate(2.56) = 2
Math.Truncate(2.00) = 2
Math.Truncate(1.20) = 1
Math.Truncate(-3.26) = -3
Math.Truncate(-3.96) = -3

इसके अलावा गणित। घाव ()

   Math.Round(1.6) = 2
   Math.Round(-8.56) = -9
   Math.Round(8.16) = 8
   Math.Round(8.50) = 8
   Math.Round(8.51) = 9

math.floor()

निर्दिष्ट संख्या से कम या बराबर सबसे बड़ा पूर्णांक देता है। MSDN system.math.floor

math.truncate()

किसी संख्या के अभिन्न अंग की गणना करता है। MSDN system.math.truncate


23

Math.Floor()IEEE मानक 754 खंड 4 के अनुपालन में "नकारात्मक अनंत की ओर" गोल ।

Math.Truncate() राउंड "शून्य की ओर निकटतम पूर्णांक पर।"


15

Math.Floor(): निर्दिष्ट डबल-सटीक फ़्लोटिंग-पॉइंट संख्या से कम या उसके बराबर सबसे बड़ा पूर्णांक लौटाता है।

Math.Round(): निकटतम पूर्णांक या भिन्न अंकों की संख्या के लिए एक मूल्य को सीमा देता है।


1
ओपी ने Floor()और के बीच अंतर के बारे में पूछा Truncate(), Floor()और नहीं Round()
रॉबर्ट कोलंबिया

5

Math.floor()हमेशा नीचे गोल होगा, यानी, यह LESSER पूर्णांक देता है। जबकि round()NEAREST पूर्णांक लौटाएगा

math.floor ()

निर्दिष्ट संख्या से कम या बराबर सबसे बड़ा पूर्णांक देता है।

math.truncate ()

किसी संख्या के अभिन्न अंग की गणना करता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.