为什么小数字不打印到字符串?

时间:2011-11-21 14:55:07

标签: objective-c cocoa

为了获得一个包含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”。

由于

3 个答案:

答案 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; (不确定那个想法)

快乐的编码......