使一个浮点只显示两位小数

我有一个float25.00 ,但是当我在屏幕上打印它是25.0000000
如何显示只有两位小数的值?

这不是数字如何存储的问题,这是你如何显示它的问题。 当将其转换为string时,必须将其舍入到所需的精度,在您的情况下为两位小数。

例如:

 NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat]; 

%.02f告诉格式化程序你将格式化一个浮点数( %f ),并且应该四舍五入到两个地方,并且应该填充0秒。

例如:

 %f = 25.000000 %.f = 25 %.02f = 25.00 

这里有一些更正 –

 //for 3145.559706 

Swift 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-C

 @"%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]]; 

您可能还需要设置否定格式,但我认为这足够聪明,可以将其解决。

在Swift语言中,如果你想表明你需要以这种方式使用它。 在UITextView中分配double值,例如:

 let result = 23.954893 resultTextView.text = NSString(format:"%.2f", result) 

如果你想在LOG中显示像objective-c使用NSLog(),那么在Swift语言中,你可以这样做:

 println(NSString(format:"%.2f", result)) 

我根据上面的答案做了一个快速的扩展

 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 

IN objective-c,如果你正在处理常规字符数组(而不是指向NSString的指针),你也可以使用:

 printf("%.02f", your_float_var); 

OTOH,如果你想要在char数组上存储这个值,你可以使用:

 sprintf(your_char_ptr, "%.02f", your_float_var); 

在目标-c是你想显示浮点值在2个十进制数然后传递参数指示多less小数点你想显示例如0.02f将打印25.00 0.002f将打印25.000

以下是根据精度dynamic格式化的一些方法:

 + (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]; 

=> 2

 [TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:2]; 

=> 2.35(向上舍入)

Swift的另一种方法(不使用NSString):

 let percentage = 33.3333 let text = String.localizedStringWithFormat("%.02f %@", percentage, "%") 

PS此解决scheme不适用于仅与FloatDoubletesting的CGFloattypes

如果您还需要浮动值:

 NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat]; float floatTwoDecimalDigits = atof([formattedNumber UTF8String]); 
  lblMeter.text=[NSString stringWithFormat:@"%.02f",[[dic objectForKey:@"distance"] floatValue]]; 

使用带有maximumFractionDigits NSNumberFormatter ,如下所示:

 NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; formatter.maximumFractionDigits = 2; NSLog(@"%@", [formatter stringFromNumber:[NSNumber numberWithFloat:12.345]]); 

你会得到12.35

所有答案的问题是,乘法和然后除法导致精度问题,因为你使用除法。 我很早以前从PDP8编程中学到了这一点。 解决这个问题的方法是:

 return roundf(number * 100) * .01; 

因此,15.6578只返回15.66,而不是15.6578999或类似的东西。

你想要什么水平的精度取决于你。 只是不要划分产品,乘以十进制等值。 没有搞笑的string转换需要