为了获得一个包含2位小数值的字符串,我尝试过:
[[NSString stringWithFormat:@"%.2f",[[self CurrentValue] doubleValue]]]
此
[self CurrentValue] stringValue]
和此:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
NSString *string = [formatter stringFromNumber:[self CurrentValue]];
[formatter release];
但它不起作用。原始数字是一个浮点数= 22,我总是得到一个字符串“22”,而不是“22.00”。
由于
答案 0 :(得分:0)
好像你有额外的[]
。你可以尝试
[NSString stringWithFormat:@"%.2f",[[self CurrentValue] floatValue]]
或
[NSString stringWithFormat:@"%.2lf",[[self CurrentValue] doubleValue]]
两者都很好。
答案 1 :(得分:0)
我运行了一些测试场景,希望这可以帮助您深入了解它。如果您使用货币,格式化程序是理想的,否则string1是理想的。要使用此示例,您可以设置编号 - NSNumber * number = [self CurrentValue];
NSNumber * number = [NSNumber numberWithInt:22];
NSString * string1 = [NSString stringWithFormat:@"%.2f",[number doubleValue]];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
NSString *string2 = [formatter stringFromNumber:number];
[formatter release];
NSLog(@"string 1 %@\nstring 2 %@\nstring 3 %@", string1, string2, [number stringValue]);
//output
string 1 22.00
string 2 $22.00
string 3 22
// top code with NSNumber * number = [NSNumber numberWithFloat:22];
string 1 22.00
string 2 $22.00
string 3 22
// top code with NSNumber * number = [NSNumber numberWithFloat:22.0];
string 1 22.00
string 2 $22.00
string 3 22
要点: 如果它确实是一个int,那么创建数字的方式对于输出并不重要(像4.20这样的浮点数在每种情况下都会按预期工作,但是每个int值22,22.0,22.000被所有3种方式处理相同创建一个数字。所以选择你最喜欢的格式并实现它。
答案 2 :(得分:0)
实际上要简单得多。
你说“原始数字是浮点数= 22”。现在,请记住obj-c运行时类可能与声明的运行时类不同。当你用实际的整数值实例化你的float变量时 - 它在运行时是一个整数!您应该将其更改为以下之一:
float someFloatValue = 22f;
float someFloatValue = 22.0;
float someFloatValue =(float)22; (不确定那个想法)
快乐的编码......