2009-03-11 16 views

उत्तर

68

उपयोग Math.round(), संभवतः MidpointRounding.AwayFromZero

साथ संयोजन के रूप में उदाहरण के लिए:

Math.Round(1.2) ==> 1 
Math.Round(1.5) ==> 2 
Math.Round(2.5) ==> 2 
Math.Round(2.5, MidpointRounding.AwayFromZero) ==> 3 
+5

'कनवर्ट नहीं करेगा। ToInt32()' वही काम करता है, या क्या यह दशमलव के बाद सबकुछ बस पट्टी करता है? –

+144

वास्तव में एक पूर्णांक उत्पन्न नहीं करता है, लेकिन एक डबल। – gatopeich

+0

मुझे लगता है कि उपरोक्त पंक्तियों 2 और 3 के बीच एक विरोधाभास (यानी त्रुटि) है, नहीं? – Ronnie

188
double d = 1.234; 
int i = Convert.ToInt32(d); 

Reference

संभालती है तो तरह गोलाई:

निकटतम 32-बिट हस्ताक्षरित पूर्णांक के लिए गोलाकार। यदि मूल्य आधे रास्ते दो पूर्ण संख्याओं के बीच है, तो भी संख्या वापस आती है; जो है, 4.5 4 में बदल जाती है, और 5,5 6.

+5

बहुत बेहतर है कि 'Math.Round' क्योंकि यह आवश्यकतानुसार एक int लौटाता है। – Keith

+5

@ किथ: लेकिन यह अवैध रूप से * यहां तक ​​कि * ** * * * * के बजाय * यहां तक ​​कि + 1 * ... –

+7

@ रॉबर्ट-कोरिटनिक के रूप में अमान्य रूप से राउंड करता है। निश्चित नहीं है कि यह "अवैध" क्यों है। ओपी ने एक पसंदीदा राउंडिंग नियम निर्दिष्ट नहीं किया है, और "राउंड .5 निकटतम तक भी" मानक नियम है। हमेशा गोल करने से अवांछित सांख्यिकीय प्रभाव होते हैं। – Keith

8
double d; 
int rounded = (int)Math.Round(d); 
0

मैं एक वैज्ञानिक कैलकुलेटर है कि एक इंट बटन खेल के विकास कर रहा हूँ में बदल जाती है। मैंने पाया निम्नलिखित एक सरल, विश्वसनीय समाधान है:

double dblInteger; 
if(dblNumber < 0) 
    dblInteger = Math.Ceiling(dblNumber); 
else 
    dblInteger = Math.Floor(dblNumber); 

गणित.गोल कभी कभी अप्रत्याशित या अवांछनीय परिणाम का उत्पादन, और स्पष्ट रूपांतरण पूर्णांक (डाली या Convert.ToInt के माध्यम से ...) अक्सर गलत मूल्यों का उत्पादन उच्च परिशुद्धता संख्या के लिए। उपरोक्त विधि हमेशा काम करता प्रतीत होता है।

+1

क्या यह सभी नकारात्मक संख्याओं को पार नहीं करता है और सभी सकारात्मक संख्याओं को नीचे चलाता है? यह जरूरी नहीं है कि "neaerest" पूर्णांक। –

+0

यह निकटतम संख्या नहीं है। –

+0

1.99 दिया गया, यह 1.0 रिटर्न देता है। –

31

तुम भी समारोह का उपयोग कर सकते हैं:

//Works with negative numbers now 
static int MyRound(double d) { 
    if (d < 0) { 
    return (int)(d - 0.5); 
    } 
    return (int)(d + 0.5); 
} 

वास्तुकला के आधार पर यह कई बार तेज है।

+0

यह मेरे लिए गणित के रूप में बिल्कुल सही था। राउंड जिस तरह से मैं चाहता था काम नहीं कर रहा था। – Johannes

+0

@ कुल्ब हां यह करता है। यह डबल डी को परिवर्तित करता है जिसमें 0.5 पूर्णांक होता है, एक पूर्णांक में। – Darrell

+0

यह मेरी पसंदीदा विधि है - एक बहुत ही सरल तरीके से काम करता है। गणित की तुलना में बहुत छोटा और आसान पढ़ने के लिए। राउंड (डी, मिडपॉइंट राउंडिंग। अवेफ्रोज़ेरो) और यदि राउंड डाउन या राउंड अप करना है तो यह चुनने के लिए एक कथन का उपयोग करने से अधिक संक्षिप्त है। और, वास्तव में अंत में एक पूर्णांक देता है, न कि – binderbound

4

मुझे पता है कि यह प्रश्न पुराना है, लेकिन मैं अपने समान प्रश्न के उत्तर के लिए अपनी खोज में आया। मैंने सोचा कि मैं बहुत उपयोगी सुझाव साझा करूंगा जो मुझे दिया गया है।

int में कनवर्ट करते समय, डाउनकास्टिंग से पहले अपने मूल्य में केवल .5 जोड़ें। चूंकि int को कम करने के लिए हमेशा निम्न संख्या (उदा। (Int) 1.7 = 1 पर गिर जाता है), यदि आपका नंबर .5 या उच्चतम है, तो .5 इसे अगले नंबर में लाएगा और आपके डाउनकास्ट को सही मान वापस करना चाहिए । (उदाहरण के लिए (int) (1.8 + .5) = 2)

मुझे आशा है कि यह उत्तर किसी के लिए सहायक होगा।

+12

समस्या यह है कि यदि आप नकारात्मक मानों को इस तरह से परिवर्तित करने का प्रयास करते हैं। उदाहरण के लिए -1.25 0 के बराबर होगा (-1.25 + 0.5 = 0.75, और एक बार इसे 0 के लिए नीचे डाला जाएगा)। तो आपको नकारात्मक मानों से 0.5 घटाएं। – Eternal21

संबंधित मुद्दे

 संबंधित मुद्दे