2011-01-12 17 views
6

यहां बहुत आसान सवाल है। मेरे पास एक दोगुना है कि मैं वापस एनएसआईएनटेगर में परिवर्तित करना चाहता हूं, जो इकाइयों की जगह पर छेड़छाड़ कर रहा है। मुझे यह कैसे करना है?डबल से एनएसआईएनटेगर को कैसे परिवर्तित करें?

NSInteger theInteger = theDouble; 

आप मूल्य की जाँच नहीं कर रहे हैं यह सोचते है कि NSInteger की सीमा के भीतर है:

+1

किसी भी कारण से आप एनएसएनंबर के बजाय एनएसआईएनटेगर चाहते हैं? क्या आप गोल करना चाहते हैं या सिर्फ एक सीधे काटना चाहते हैं? –

+0

अब जब मैं इसके बारे में सोचता हूं, तो इसे गोल करना अच्छा लगेगा। –

उत्तर

14

ट्रंकेशन एक अंतर्निहित रूपांतरण है। आपको लगता है कि क्या करना चाहते हैं, तो आप कुछ शाखाओं में जोड़ना होगा:

NSInteger theInteger = 0; 
if (theDouble > NSIntegerMax) { 
    // ... 
} else if (theDouble < NSIntegerMin) { 
    // ... 
} else { 
    theInteger = theDouble; 
} 
+0

बिल्कुल वही जो मैं खोज रहा था, धन्यवाद। सीमा के लिए जांच का बोनस जोड़ा गया, सिवाय इसके कि मुझे इसके उपयोग के लिए इसके बारे में चिंता करने की ज़रूरत नहीं है। एक बार फिर धन्यवाद! –

+3

आपने टिप्पणी में गोल करने का उल्लेख किया है। गोलाकार करने के लिए 'मंजिल (दोगुनी) 'के लिए' छत (दोगुनी) 'का उपयोग करें। याद रखें कि ऋणात्मक संख्याओं के लिए, गोलाकार शून्य की ओर घूम रहा है, और नीचे घूर्णन नकारात्मक अनंतता की ओर घूम रहा है। –

+0

+1: आह मैंने नीचे एक साधारण गोलाकार समारोह बनाया .. डबल्स के लिए छत और मंजिल को याद नहीं किया। बहुत बेहतर और सटीक उत्तर –

4

NSInteger एक सी प्रकार के लिए एक typedef है। तो आप बस कर सकते हैं:

double originalNumber; 
NSInteger integerNumber = (NSInteger)originalNumber; 

कौन सा सी स्पेक, मूल संख्या को छोटा कर देगा।

+0

ऐसा लगता है कि आपको एक ही समय में एक ही जवाब मिल गया है। :) –

+1

हां, लेकिन जोनाथन कवर सीमा, इसलिए निश्चित रूप से टिक का हकदार है। – Tommy

1

लेकिन वैसे भी, यह मानते हुए आप कोई राउंडिंग चाहते हैं, मेरा मानना ​​है इस गोलाई लिए काम करना चाहिए बस

double myDouble = 10.4223; 
NSInteger myInt = myDouble; 

संपादित करें: (मुझे यकीन है कि थेरेस हूँ यह करने के लिए एक बहुत सरल (और सटीक) जिस तरह से .. (यह भी ऋणात्मक संख्याओं या अधिकतम सीमा नहीं) के लिए खाते में नहीं है

double myDecimal = myDouble - myInt; 
if(myDecimal < 0.50) 
{ 
//do nothing 
} 
else 
{ 
myInt = myInt + 1; 
} 
1

NSInteger एक typedef, यह एक पूर्णांक का उपयोग कर के रूप में ही है वैसे ही जैसे मूल्य निर्दिष्ट है:।

double d;
NSInteger i = d;

0

जेसीनॉघर राउंडिंग का उल्लेख करता है और मुझे लगता है कि ओपी की जरूरतों को एक साधारण छिद्र के साथ पूरा किया गया था, लेकिन पूर्ण सामान्यीकरण की भावना में गोल करने के लिए फर्श() को आमंत्रित करने से पहले 0.5 को डबल जोड़ने की सरल चाल को याद रखना उचित है। जोनाथन ग्रिन्सपैन की टिप्पणी को विस्तारित करना: NSInteger myInt = floor(myDouble + 0.5); यानी पूर्ण शर्तों में गोल करना। यदि राउंडिंग 'अप' का अर्थ है शून्य से घूमने के लिए एक अधिक ठोस दृष्टिकोण की आवश्यकता है: NSInteger myInt = floor(myDouble + (myDouble < 0.0 ? -0.5 : 0.5));

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