2010-11-15 10 views
104

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

+6

"सर्वश्रेष्ठ" परिभाषित करें। निर्भर करता है कि क्या आप ऊपर/नीचे गोल करना चाहते हैं, आदि – RPM1984

+7

@ आरपीएम 1 9 84: 'आदि' को परिभाषित करें :) –

+14

@ आर्मेन - स्पर्श करें :) वास्तव में कोई फर्क नहीं पड़ता है - स्कीट यहां है, और कुछ भी मायने रखता है। – RPM1984

उत्तर

179

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

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

+0

मुझे आश्चर्य है कि 64 बिट्स मशीन में, Convert.ToInt32 अब और ठीक नहीं है? – user496949

+20

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

+2

और युगल 64 बिट int की तुलना में बहुत अधिक हो सकता है। –

23

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

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

Convert कक्षा का उपयोग अच्छी तरह से काम करता है।

int someOtherInt = Convert.ToInt32(someDouble); 
6

Convert.ToInt32 आप आंशिक हिस्सा काटना होगा सबसे अच्छा तरीका है अगर आप कलाकारों का उपयोग

+0

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

34

कन्वर्ट करने के लिए है, कि है, (int)SomeDouble। यही है, अगर SomeDouble 4.9 999 थे तो परिणाम 4 होगा, न कि 5. int में कनवर्ट करना संख्या के चारों ओर नहीं है। आप उपयोग गोलाई Math.Round

0

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

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

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

+6

तीसरा अंशकालिक भागों के साथ युगल के साथ काम नहीं करेगा। उदाहरण के लिए, 'double_value = 0.1' –

+0

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

2

मुझे लगता है कि सबसे अच्छा तरीका है 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 
2

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

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

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

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

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

अगर आप केवल 2 के साथ चाहते है, और यह हमेशा

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