मेरे पास एक मूल्य 25.00
है float
, लेकिन जब मैं इसे स्क्रीन पर प्रिंट करता हूं तो यह होता है 25.0000000
।
मैं केवल दो दशमलव स्थानों के साथ मूल्य कैसे प्रदर्शित कर सकता हूं?
मेरे पास एक मूल्य 25.00
है float
, लेकिन जब मैं इसे स्क्रीन पर प्रिंट करता हूं तो यह होता है 25.0000000
।
मैं केवल दो दशमलव स्थानों के साथ मूल्य कैसे प्रदर्शित कर सकता हूं?
जवाबों:
यह कोई बात नहीं है कि संख्या कैसे संग्रहीत की जाती है, यह एक बात है कि आप इसे कैसे प्रदर्शित कर रहे हैं। इसे एक स्ट्रिंग में परिवर्तित करते समय आपको वांछित सटीकता के लिए गोल करना चाहिए, जो आपके मामले में दो दशमलव स्थान है।
उदाहरण के लिए:
NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
%.02f
फ़ॉर्मेटर को बताता है कि आप एक फ़्लोट प्रारूपण करेंगे (%f
) हैं, और इसे दो स्थानों पर गोल किया जाना चाहिए, और 0
एस के बाद गद्देदार होना चाहिए ।
उदाहरण के लिए:
%f = 25.000000
%.f = 25
%.02f = 25.00
25
.. @"%.f"
क्या चाल है। ऊपर जो लिखा है, वह नहीं ।
@"%.*f", decimalPlaces, number
%03.f = 025
यहाँ कुछ सुधार हैं-
//for 3145.559706
स्विफ्ट 3
let num: CGFloat = 3145.559706
print(String(format: "%f", num)) = 3145.559706
print(String(format: "%.f", num)) = 3145
print(String(format: "%.1f", num)) = 3145.6
print(String(format: "%.2f", num)) = 3145.56
print(String(format: "%.02f", num)) = 3145.56 // which is equal to @"%.2f"
print(String(format: "%.3f", num)) = 3145.560
print(String(format: "%.03f", num)) = 3145.560 // which is equal to @"%.3f"
Obj सी
@"%f" = 3145.559706
@"%.f" = 3146
@"%.1f" = 3145.6
@"%.2f" = 3145.56
@"%.02f" = 3145.56 // which is equal to @"%.2f"
@"%.3f" = 3145.560
@"%.03f" = 3145.560 // which is equal to @"%.3f"
और इसी तरह...
आप NSNumberFormatter का उपयोग करके भी देख सकते हैं:
NSNumberFormatter* nf = [[[NSNumberFormatter alloc] init] autorelease];
nf.positiveFormat = @"0.##";
NSString* s = [nf stringFromNumber: [NSNumber numberWithFloat: myFloat]];
आपको नकारात्मक प्रारूप भी सेट करने की आवश्यकता हो सकती है, लेकिन मुझे लगता है कि यह समझ से बाहर है।
मैंने उपरोक्त उत्तरों के आधार पर एक तेजी से विस्तार किया
extension Float {
func round(decimalPlace:Int)->Float{
let format = NSString(format: "%%.%if", decimalPlace)
let string = NSString(format: format, self)
return Float(atof(string.UTF8String))
}
}
उपयोग:
let floatOne:Float = 3.1415926
let floatTwo:Float = 3.1425934
print(floatOne.round(2) == floatTwo.round(2))
// should be true
स्विफ्ट भाषा में, यदि आप दिखाना चाहते हैं तो आपको इसे इस तरह से उपयोग करने की आवश्यकता है। उदाहरण के लिए, UITextView में दोहरा मूल्य प्रदान करने के लिए:
let result = 23.954893
resultTextView.text = NSString(format:"%.2f", result)
यदि आप लॉग में दिखाना चाहते हैं जैसे कि उद्देश्य-सी NSLog () का उपयोग करता है, तो स्विफ्ट भाषा में आप इस तरह से कर सकते हैं:
println(NSString(format:"%.2f", result))
यदि आप नियमित चार सरणियों (एनएसएसट्रिंग की ओर संकेत करने के बजाय) का उपयोग कर रहे हैं, तो आप इसका उपयोग भी कर सकते हैं:
printf("%.02f", your_float_var);
OTOH, यदि आप जो चाहते हैं, उस मूल्य को एक चार सरणी पर संग्रहीत करें जो आप उपयोग कर सकते हैं:
sprintf(your_char_ptr, "%.02f", your_float_var);
सभी उत्तरों के साथ समस्या यह है कि गुणा करना और फिर सटीक मुद्दों में परिणाम विभाजित करना क्योंकि आपने विभाजन का उपयोग किया था। मैंने यह एक पीडीपी 8 पर प्रोग्रामिंग से बहुत पहले सीखा था। इसे हल करने का तरीका है:
return roundf(number * 100) * .01;
इस प्रकार 15.6578 रिटर्न सिर्फ 15.66 है और 15.6578999 या ऐसा कुछ नहीं है।
आपको किस स्तर की सटीकता चाहिए। बस उत्पाद को विभाजित न करें, इसे दशमलव समकक्ष से गुणा करें। कोई अजीब स्ट्रिंग रूपांतरण की आवश्यकता है।
यहां सटीकता के अनुसार गतिशील रूप से प्रारूपित करने के कुछ तरीके दिए गए हैं:
+ (NSNumber *)numberFromString:(NSString *)string
{
if (string.length) {
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
f.numberStyle = NSNumberFormatterDecimalStyle;
return [f numberFromString:string];
} else {
return nil;
}
}
+ (NSString *)stringByFormattingString:(NSString *)string toPrecision:(NSInteger)precision
{
NSNumber *numberValue = [self numberFromString:string];
if (numberValue) {
NSString *formatString = [NSString stringWithFormat:@"%%.%ldf", (long)precision];
return [NSString stringWithFormat:formatString, numberValue.floatValue];
} else {
/* return original string */
return string;
}
}
जैसे
[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:4];
=> 2.3453
[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:0];
=> २
[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:2];
=> 2.35 (राउंड अप)
स्विफ्ट के लिए एक और तरीका (NSString का उपयोग किए बिना):
let percentage = 33.3333
let text = String.localizedStringWithFormat("%.02f %@", percentage, "%")
PS यह समाधान केवल CGFloat प्रकार के साथ काम नहीं कर रहा है, जिसके साथ परीक्षण किया गया है Float
&Double
यदि आपको मूल्य के रूप में अच्छी तरह से तैरने की आवश्यकता है:
NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
float floatTwoDecimalDigits = atof([formattedNumber UTF8String]);