2009-04-15 9 views
71

में गोल संख्याएं मैं एक उद्देश्य-सी प्रोग्राम में आउटपुट बढ़ाने के लिए स्ट्रिंग में कुछ संख्या गोल करने और रूपांतरण करने की कोशिश कर रहा हूं।उद्देश्य-सी

मेरे पास एक फ्लोट वैल्यू है जो मैं निकटतम में गोल करना चाहता हूं .5 और फिर लेबल पर टेक्स्ट सेट करने के लिए इसका उपयोग करें।

उदाहरण के लिए:

1.4 की एक स्ट्रिंग होगा: 1.5

1.2 की एक स्ट्रिंग होगा: 0

मैंने: 1

0.2 की एक स्ट्रिंग होगा उत्तर के लिए Google पर कुछ समय बिताया लेकिन उद्देश्य-सी के साथ एक नोब होने के नाते, मुझे यकीन नहीं है कि क्या खोजना है! तो, मैं वास्तव में सही दिशा में एक सूचक की सराहना करता हूं!

धन्यवाद, ऐश

+27

एक लेबल के लिए मूल्य जोड़ने (जो वह अपने इरादे के रूप में घोषित करने की है और वास्तव में के बारे में पूछ नहीं) अपने प्रश्न कुछ भी नहीं कोको के साथ क्या करना है और सब कुछ करना है के अलावा Obj-C –

उत्तर

97

संकेत हर किसी के लिए धन्यवाद, मैं एक समाधान के साथ आने में कामयाब रहे है:

float roundedValue = round(2.0f * number)/2.0f; 
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setMaximumFractionDigits:1]; 
[formatter setRoundingMode: NSNumberFormatterRoundDown]; 

NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:roundedValue]]; 
[formatter release]; 

परीक्षण मामलों मैंने इसे फेंक दिया के लिए ऊपर काम करता है, लेकिन अगर किसी को भी एक बेहतर तरीका जानता है ऐसा करने के लिए मुझे यह सुनना होगा!

+7

के साथ यदि यह किसी टेक्स्ट फ़ील्ड में आउटपुट हो रहा है, तो आप फ़ॉर्मर को फ़ील्ड में संलग्न कर सकते हैं। – Chuck

31
NSString *numberString = [NSString stringWithFormat:@"%f", round(2.0f * number)/2.0f]; 
24

पूर्णांक के लिए एक फ्लोट को गोल करने के लिए lroundf() का उपयोग करें और फिर पूर्णांक को स्ट्रिंग में परिवर्तित करें।

+0

यह थोड़ा उलझन में लगता है, इसलिए मैं स्पष्ट करता हूं। 'lroundf() 'एक पूरे नंबर पर एक फ्लोट चलाता है और इसे लंबे पूर्णांक के रूप में वापस देता है (इसे एक स्ट्रिंग में परिवर्तित करने के लिए जिसे आप' stringWithFormat:') का उपयोग कर सकते हैं। – Daniel

11
NSString *numberString = [NSString stringWithFormat:@"%d",lroundf(number)]; 
2
NSString *intNumberString = [NSString stringWithFormat:@"%d", (int)floatNumber]; 
35
float floatVal = 1.23456; 

गोलाई

int roundedVal = lroundf(floatVal); 

NSLog(@"%d",roundedVal); 

गोलाई ऊपर

int roundedUpVal = ceil(floatVal); 

NSLog(@"%d",roundedUpVal); 

Rou nding

int roundedDownVal = floor(floatVal); 

NSLog(@"%d",roundedDownVal); 
2

निम्नलिखित तकनीक ने वित्तीय अनुप्रयोग में मेरे लिए काम किया।

NSString *dd=[NSString stringWithFormat:@"%0.2f",monthlyPaymentCalculated]; 

     monthlyPaymentCalculated=[dd doubleValue]; 

self.monthlyPaymentCritical=monthlyPaymentCalculated; 

क्या किया जाता है पहले% 0.2f साथ यह गोल और NSString में यह संग्रहीत किया जाता है तो मैं इसे फिर से में डबल और परिणाम मेरी गणना के लिए अच्छा था परिवर्तित।

0

मुझे एक विशिष्ट अंक (पूरे पूर्णांक के लिए जरूरी नहीं) तक पहुंचने में सक्षम होना चाहिए।मैं एक NSNumber श्रेणी (Ash's answer बंद आधारित) बना दिया है और इसे करने के लिए निम्न विधि कहा:

- (NSString *)stringByRounding:(NSNumberFormatterRoundingMode)roundingMode 
     toPositionRightOfDecimal:(NSUInteger)position 
{ 
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
    [formatter setMaximumFractionDigits:position]; 
    [formatter setRoundingMode:roundingMode]; 
    NSString *numberString = [formatter stringFromNumber:self]; 
    return numberString; 
} 

कौन मुझे यह बहुत पसंद है उपयोग करने के लिए अनुमति देता है:

[aNumber stringByRounding:NSNumberFormatterRoundUp toPositionRightOfDecimal:2]; 

मैं द्वारा पूर्णांक पर पूर्णांक के लिए इसका इस्तेमाल कर सकते हैं दूसरा पैरामीटर के रूप में 0 में गुजर:

[aNumber stringByRounding:NSNumberFormatterRoundPlain toPositionRightOfDecimal:0]; 
0

इन कार्यों आप किसी भी मूल्य पर पूर्णांक कर सकते हैं .. आप पी = 2 का उपयोग करते हैं, तो आप भी नंबर प्राप्त करें।

float RoundTo(float x, float p) 
{ 
    float y = 1/p; 
    return int((x+(1/(y+y)))*y)/y; 
} 

float RoundUp(float x, float p) 
{ 
    float y = 1/p; 
    return int((x+(1/y))*y)/y; 
} 

float RoundDown(float x, float p) 
{ 
    float y = 1/p; 
    return int(x*y)/y; 
} 
3

एक आसान तरीका:

float theFloat = 1.23456; 
int rounded = roundf(theFloat); NSLog(@"%d",rounded); 
int roundedUp = ceil(theFloat); NSLog(@"%d",roundedUp); 
int roundedDown = floor(theFloat); NSLog(@"%d",roundedDown); 
// Note: int can be replaced by float