इंट में डबल कन्वर्ट


156

सबसे अच्छा तरीका है एक कन्वर्ट करने के लिए क्या है doubleएक करने के लिए int? क्या एक कास्ट का इस्तेमाल किया जाना चाहिए?


7
परिभाषित "सबसे अच्छा"। निर्भर करता है कि आप अप / डाउन राउंडिंग आदि चाहते हैं
RPM1984

8
@ RPM1984: परिभाषित करें etc.:)
आर्मेन Tsirunyan

18
@Armen - touche` :) वास्तव में वैसे भी मायने नहीं रखता है - स्कीट यहाँ है, और कुछ भी मायने नहीं रखता है।
RPM1984

जवाबों:


237

यदि आप डिफॉल्ट ट्रंकट-प्रति-शून्य व्यवहार चाहते हैं तो आप एक कास्ट का उपयोग कर सकते हैं। वैकल्पिक रूप से, आप उपयोग करना चाहते हो सकता है Math.Ceiling, Math.Round, Math.Floorआदि - हालांकि आप अभी भी बाद में एक डाली की आवश्यकता होगी।

मत भूलो कि की सीमा सीमा की intतुलना में बहुत छोटी है double। से एक डाली doubleको intयदि मान की सीमा के बाहर है एक अपवाद फेंक नहीं होगा intके लिए एक कॉल जबकि, एक अनियंत्रित संदर्भ में Convert.ToInt32(double)इच्छा। यदि मूल्य सीमा के बाहर है, तो कलाकारों का परिणाम (अनियंत्रित संदर्भ में) स्पष्ट रूप से अपरिभाषित है।


24
@user: एक intका आकार हमेशा 32 बिट्स होता है, भले ही आप 32 या 64 बिट मशीन का उपयोग कर रहे हों।
जॉरेन

3
और डबल्स 64 बिट इंट की तुलना में बहुत अधिक गले लगा सकते हैं।
एड्रियन रत्नपाल

7
मेरे जैसे C # noobs के लिए: Math और Convert दोनों सिस्टम का हिस्सा हैं। तो पूरा जवाब इस तरह दिखता है:intVal = System.Convert.ToInt32(System.Math.Floor(dblVal));
kris

9
@ user1290746: यह काम करेगा, लेकिन आप आमतौर पर सिर्फ using System;फ़ाइल के शीर्ष पर होगा, जिस बिंदु पर यह अभी हो सकता हैintVal = Convert.ToInt32(Math.Floor(dblVal));
जॉन स्कीट

3
@ user1290746: लेकिन उस मामले में, मुझे नहीं लगता कि लोगों को पूरी तरह से योग्य नामों का उपयोग करने के लिए सलाह देने के लिए सही समाधान है - बेहतर समाधान usingनिर्देशों के बारे में सीखना है ।
जॉन स्कीट

39

यदि आप कास्ट का उपयोग करते हैं, अर्थात, (int)SomeDoubleआप आंशिक भाग को छोटा कर देंगे। यही है, अगर SomeDouble4.9999 थे , तो परिणाम 4 होगा, 5 नहीं। int में परिवर्तित करना संख्या को गोल नहीं करता है। अगर आप राउंडिंग यूज चाहते हैंMath.Round


34

हां क्यों नहीं?

double someDouble = 12323.2;
int someInt = (int)someDouble;

Convertकक्षा का उपयोग करना भी अच्छा है।

int someOtherInt = Convert.ToInt32(someDouble);

7

Convert.ToInt32 कन्वर्ट करने का सबसे अच्छा तरीका है


यह आमतौर पर असुरक्षित कार्य करता है क्योंकि यह सिर्फ कुछ भी स्वीकार करता है।
Ant_222

4

सबसे अच्छा तरीका बस का उपयोग करना है Convert.ToInt32। यह तेज़ है और सही तरीके से गोल भी है।

इसे और अधिक जटिल क्यों बनाते हैं?


2

यहाँ एक पूर्ण उदाहरण है

class Example 
{    
  public static void Main() 
  {    
    double x, y; 
    int i; 

    x = 10.0; 
    y = 3.0; 

    // cast double to int, fractional component lost (Line to be replaced) 
    i = (int) (x / y); 
    Console.WriteLine("Integer outcome of x / y: " + i); 
  }    
}

यदि आप संख्या को पूर्णांक के करीब करना चाहते हैं, तो निम्न कार्य करें:

i = (int) Math.Round(x / y); // Line replaced



0

मेरे तरीके हैं:

 - Convert.ToInt32(double_value)
 - (int)double_value
 - Int32.Parse(double_value.ToString());

11
क्या आपको नहीं लगता कि तीसरा रास्ता अनावश्यक रूप से जटिल और धीमा है?
अर्मेन त्सिरुन्यान

6
तीसरा भिन्नात्मक भागों के साथ डबल्स के साथ काम नहीं करेगा। जैसे,double_value = 0.1
जेफ मर्काडो

मुझे लगता है कि आप Math.loor का उपयोग कर सकते हैं।
lindexi

0
label8.Text = "" + years.ToString("00") + " years";

जब आप इसे एक लेबल, या कुछ और भेजना चाहते हैं, और आप किसी भी आंशिक घटक को नहीं चाहते हैं, तो यह सबसे अच्छा तरीका है

label8.Text = "" + years.ToString("00.00") + " years";

यदि आप केवल 2 के साथ चाहते हैं, और यह हमेशा ऐसा है

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