मैं एक पूर्णांक मान को दोगुना कैसे परिवर्तित कर सकता हूं?


147

आप एक डबल को निकटतम इंट में कैसे परिवर्तित करते हैं?

जवाबों:


78

का उपयोग करें 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

6
Convert.ToInt32()एक ही बात नहीं करेंगे , या यह बस दशमलव के बाद सब कुछ पट्टी करता है?
मफिन मैन

208
वास्तव में एक पूर्णांक का उत्पादन नहीं करता है, लेकिन एक डबल।
गैटोपिच

13
@ रॉनी - नहीं, यह डिजाइन द्वारा है। डिफ़ॉल्ट रूप से, Math.Round, midpoint की संख्याओं (x + .5) को निकटतम सम संख्या में गोल करेगा । यदि आप एक अलग व्यवहार चाहते हैं, तो आपको इसे एक ध्वज के माध्यम से निर्दिष्ट करना होगा। msdn.microsoft.com/en-us/library/system.midpointrounding.aspx
nick

6
मै कभी नहीं! :)
रॉनी

5
डबल इंट नहीं है।
इवगेनी नाबोकोव

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

संदर्भ

हैंडल राउंडिंग जैसे:

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


7
बहुत बेहतर है कि Math.Roundयह आवश्यक के रूप में एक इंट रिटर्न देता है।
कीथ

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

@ कीथ: मुझे नहीं पता, लेकिन मुझे हमेशा एक्स 5 को गोल करना सिखाया गया है, लेकिन मैं इसे आंकड़ों के लिए ऊपर या नीचे करने के लिए तर्क देख सकता हूं। उसके लिए धन्यवाद। PS यह देखने के लिए स्पष्ट है कि मैं सांख्यिकी, वित्त या लेखांकन में नहीं हूँ जहाँ इस प्रकार की गोलाई डिफ़ॉल्ट प्रतीत होती है
रॉबर्ट कोरिटनिक

3
"हमेशा राउंडिंग में अवांछित सांख्यिकीय प्रभाव होते हैं" - यह सिर्फ सादा झूठ है। राउंडिंग .5 अप राउंड बिल्कुल आधी संख्या - [0,.5)- नीचे और ठीक आधी संख्या - [.5,1)- ऊपर। यहां तक कि थोड़ा करने के लिए गोलाई भी संख्या पक्षपात, के रूप में यह दौर (.5,1.5)1 के लिए, लेकिन [1.5,2.5]2. करने के लिए
जिम Balter

11
@JimBalter जैसे ही शून्य को गोल नहीं किया जाता है, आधा ऊपर घूमने से एक सकारात्मक पूर्वाग्रह शुरू होता है, इस प्रकार इसे असममित गोलाई के रूप में जाना जाता है। "राउंड हाफ टू ईवन" नहीं होता है, यदि आपका डिस्ट्रीब्यूशन भी पर्याप्त है और राउंडिंग बायस भी या असमान संख्या नहीं करता है। देखें आधे रास्ते गोलाई टाई को तोड़ने की
sdds

36

आप फ़ंक्शन का उपयोग भी कर सकते हैं:

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

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


यह मेरे लिए एकदम सही था क्योंकि मैथ.ाउंड उस तरह से काम नहीं कर रहा था जैसा मैं चाहता था।
हन्ना

@ कुल्लू हां यह करता है। यह डबल d को कनवर्ट करता है, जो कि इसमें 0.5 जोड़ा गया था, एक पूर्णांक तक।
डेरेल

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

3
नकारात्मक संख्याओं पर अजीब व्यवहार के लिए @ Eternal21 की टिप्पणी नीचे देखें (MyRound (-1.2) = 0)
क्रिस

2
किसी को भी आश्चर्य हो रहा है, @Chris द्वारा बताई गई समस्या अब मान के नकारात्मक होने पर जाँच करके हल की गई है।
जॉन वीज़

14
double d;
int rounded = (int)Math.Round(d);

5

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

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


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

एक का उपयोग कर सकते हैं+ 0.5 * Math.Abs(d)
TaW

0

अन्य उत्तरों में विधियाँ फेंकती हैं OverflowExceptionयदि फ्लोट मान Int श्रेणी के बाहर है। https://docs.microsoft.com/en-us/dotnet/api/system.convert.toint32?view=netframework-4.8#System_Convert_ToInt32_System_Single_

int result = 0;
try {
    result = Convert.ToInt32(value);
}
catch (OverflowException) {
    if (value > 0) result = int.MaxValue;
    else result = int.Minvalue;
}

-1

एकता के लिए, Mathf.RoundToInt का उपयोग करें

using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    void Start()
    {
        // Prints 10
        Debug.Log(Mathf.RoundToInt(10.0f));
        // Prints 10
        Debug.Log(Mathf.RoundToInt(10.2f));
        // Prints 11
        Debug.Log(Mathf.RoundToInt(10.7f));
        // Prints 10
        Debug.Log(Mathf.RoundToInt(10.5f));
        // Prints 12
        Debug.Log(Mathf.RoundToInt(11.5f));

        // Prints -10
        Debug.Log(Mathf.RoundToInt(-10.0f));
        // Prints -10
        Debug.Log(Mathf.RoundToInt(-10.2f));
        // Prints -11
        Debug.Log(Mathf.RoundToInt(-10.7f));
        // Prints -10
        Debug.Log(Mathf.RoundToInt(-10.5f));
        // Prints -12
        Debug.Log(Mathf.RoundToInt(-11.5f));
    }
}

स्रोत

public static int RoundToInt(float f) { return (int)Math.Round(f); }

Q एकता का उल्लेख या टैग नहीं करता है।
XenoRo

@XenoRo मैं उन लोगों के लिए इस पुराने सवाल का जवाब दे रहा था जो एकता का उपयोग करते समय इसी तरह के उत्तर खोज रहे हैं।
zwcloud

2
ज्ञान-बँटवारे के लिए आप स्वयं के प्रश्नों का उत्तर दे सकते हैं। इस तरह के मामलों में एपीआई (इस मामले में एकता) में विशिष्ट प्रश्न बनाएं। सवालों के जवाब सही होने चाहिए। अन्यथा राउंडिंग फ़ंक्शन के साथ हर एक C # API के लिए यहां एक उत्तर हो सकता है।
XenoRo

-2

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

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

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


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

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

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