我在浮点数中有值25.00,但当我在屏幕上打印它时,它是25.0000000。 如何显示只有两位小数点后的值?


当前回答

使用NSNumberFormatter和maximumFractionDigits,如下所示:

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

你会得到12.35

其他回答

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

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

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

sprintf(your_char_ptr, "%.02f", your_float_var);
 lblMeter.text=[NSString stringWithFormat:@"%.02f",[[dic objectForKey:@"distance"] floatValue]];

所有答案的问题是,乘法和除法会导致精度问题,因为你使用了除法。这是我很久以前在PDP8上编程时学到的。 解决方法是:

return roundf(number * 100) * .01;

因此,15.6578只返回15.66,而不是15.6578999或类似意外的结果。

你想要的精确程度取决于你自己。只是不要除以乘积,要乘以等量的小数。 不需要搞笑的字符串转换。

你也可以尝试使用NSNumberFormatter:

NSNumberFormatter* nf = [[[NSNumberFormatter alloc] init] autorelease];
nf.positiveFormat = @"0.##";
NSString* s = [nf stringFromNumber: [NSNumber numberWithFloat: myFloat]];

你可能还需要设置否定格式,但我认为解决这个问题已经足够聪明了。

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

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

附注:此解决方案不适用于CGFloat类型,仅用Float & Double测试