2009-07-11 16 views
18

को एक डबल कैसे मैं एक स्ट्रिंग के लिए डबल से निम्न रूपांतरण प्राप्त करते हैं:सीमा दो दशमलव स्थानों

1.4324 => "1.43" 
9.4000 => "9.4" 
43.000 => "43" 

यानी मैं स्थानों दशमलव में करने के लिए पूर्णांक बनाना चाहते हैं, लेकिन किसी भी अनुगामी शून्य चाहते हैं, यानी मुझे नहीं चाहते

9.4 => "9.40" (wrong) 
43.000 => "43.00" (wrong) 

तो के रूप में यह अतिरिक्त शून्य प्रदर्शित करता है जो मैं अब काम नहीं करता इस कोड:

[NSString stringWithFormat: @"%.2f", total] 
+1

यह http://stackoverflow.com/questions/4985791/round-double-value-to-2-decimal-places का डुप्लिकेट नहीं है तो मुझे लगता है कि यह एक के रूप में अचिह्नित होना चाहिए नकल। यह प्रश्न है कि अधिकतम * दो दशमलव स्थानों तक सीमित कैसे करें जबकि दूसरा प्रश्न यह है कि * हमेशा * दो दशमलव तक सीमित कैसे करें। उत्तरार्द्ध मूल प्रश्न में आसान और पहले से ही उल्लेख किया गया है। –

+0

हाँ यह एक डुप्लिकेट नहीं है। किसी ने बस अपनी आधुनिक शक्तियों के बारे में उत्साहित किया। – Jacob

उत्तर

1

मैं उद्देश्य सी से परिचित नहीं हूं, लेकिन मानक प्रिंटफ-शैली स्वरूपण के साथ यह संभव नहीं है।

% g का उपयोग करना काम की तरह होगा, लेकिन बड़ी या छोटी संख्या के लिए यह दशमलव नोटेशन के बजाय वैज्ञानिक नोटेशन (जैसे 9.6e + 6, 4.2e-7) का उपयोग करेगा।

equivalent question was asked for C/C++ here, और उस स्थिति में उत्तर% f का उपयोग करना है और फिर किसी भी पिछला 0 स्ट्रिंग से स्ट्रिप करना है। बिल्कुल सुरुचिपूर्ण नहीं है।

+0

अरे, मेरा जवाब था कि आप सुरुचिपूर्ण कॉल कर रहे हैं :-) वास्तव में यह उद्देश्य-सी में बहुत अधिक सुरुचिपूर्ण है क्योंकि तार वास्तव में सी चार सरणी के बजाय अपने सभी foibles के साथ तार हैं। – paxdiablo

4

सबसे आसान तरीका शायद अपना खुद का रोल करना है। मुझे पहले सी में ऐसा करना पड़ा क्योंकि printf फ़ॉर्मेटिंग के साथ आप जिस व्यवहार को चाहते हैं उसे प्राप्त करने का कोई तरीका नहीं है।

यह उद्देश्य-सी में भी बहुत आसान प्रतीत नहीं होता है।

NSString *ftotal = [NSString stringWithFormat: @"%.2f", total]; 
while ([ftotal hasSuffix:@"0"]) { 
    ftotal = [ftotal subStringToIndex [ftotal length]-1]; 
} 
if ([ftotal hasSuffix:@"."]) { 
    ftotal = [ftotal subStringToIndex [ftotal length]-1]; 
} 

या इस (संभवतः तेज) संस्करण:

NSString *ftotal = [NSString stringWithFormat: @"%.2f", total]; 
if ([ftotal hasSuffix:@".00"]) { 
    ftotal = [ftotal subStringToIndex [ftotal length]-3]; 
} else { 
    if ([ftotal hasSuffix:@"0"]) { 
     ftotal = [ftotal subStringToIndex [ftotal length]-1]; 
    } 
} 

stringWithFormat की गारंटी देता है वहाँ हमेशा हो जाएगा अंत में एक ".nn" (जहां n अंक के चरित्र है) मैं इस आजमाइए था । while और if यदि यह एक पूर्णांक था तो पीछे पीछे शून्य और पिछला दशमलव हटा दें।

जाहिर है, आप इसे किसी फ़ंक्शन या क्लास में रखना चाहते हैं ताकि आप कहीं भी कोड को डुप्लिकेट किए बिना कहीं से भी प्राप्त कर सकें।

-2

मुझे पूरा यकीन है कि [[NSNumber numberWithFloat: f] stringValue] वही करता है जो आप चाहते हैं।

35

आपने सरल गलती की। यह काम करेगा:

[NSString stringWithFormat: @"%.2lf", total] 
+7

यह काम करता है, लेकिन कैसे? – Beniamin

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