我有一个float类型的值为
如何只显示两位小数?
25.00
,但是当我在屏幕上打印它时,它变成了25.0000000
。如何只显示两位小数?
25.00
,但是当我在屏幕上打印它时,它变成了25.0000000
。问题不在于数字的存储方式,而在于它的显示方式。当将其转换为字符串时,您必须按所需精度舍入,这在您的情况下是保留两位小数。
例如:
NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
%.02f
表示你将要格式化一个浮点数 (%f
) ,并且需要四舍五入到小数点后两位,同时在左侧填充 0
。
例如:
%f = 25.000000
%.f = 25
%.02f = 25.00
@"%.*f", decimalPlaces, number
。 - Jonathan.%03.f = 025
。 - SoftDesigner以下是一些更正:
//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扩展。
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
let result = 23.954893
resultTextView.text = NSString(format:"%.2f", result)
如果你想像Objective-C一样使用NSLog()在LOG中显示信息,那么在Swift语言中可以这样做:
println(NSString(format:"%.2f", result))
return roundf(number * 100) * .01;
在Objective-C中,如果你正在处理普通的字符数组(而不是指向NSString的指针),你也可以使用:
printf("%.02f", your_float_var);
另一方面,如果您想将该值存储在char数组中,您可以使用以下方法:
sprintf(your_char_ptr, "%.02f", your_float_var);
使用以下方式将maximumFractionDigits
与NSNumberFormatter
一起使用:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.maximumFractionDigits = 2;
NSLog(@"%@", [formatter stringFromNumber:[NSNumber numberWithFloat:12.345]]);
你将会得到 12.35
+ (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;
}
}
e.g.
[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:4];
=> 2.3453
[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:0];
=> 2
[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:2];
=> 2.35(向上取整)
在Objective-C中,如果您想要以2位小数显示浮点值,则需要传递参数指示您想要显示多少个小数点。 例如,0.02f将打印25.00,0.002f将打印25.000。