2011-11-21 80 views
0

为了得到一个字符串与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]; 

但它不工作。原始数字是一个float = 22,我总是得到一个字符串“22”,而不是“22.00”。

感谢

+2

奇怪 - 你给应该工作的第一个代码示例!你有没有试过直接记录它? – trojanfoe

+0

不知道这是否有帮助,但试试:[[NSString stringWithFormat:@“%。2f”,[[self CurrentValue] floatValue]]]'或[[NSString stringWithFormat:@“%。2lf”, [[self CurrentValue] doubleValue]]]'。 – dasdom

+0

第一个确实是正确的,应该给你预期的结果。 – sidyll

回答

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种方式创建一个数字,所以选择你最喜欢的格式,并实现这一点

0

看来你有额外的[]左右。您可以尝试

[NSString stringWithFormat:@"%.2f",[[self CurrentValue] floatValue]]

[NSString stringWithFormat:@"%.2lf",[[self CurrentValue] doubleValue]]都是好到哪里​​去。

+1

通常,当提问者的语法无效,但他们询问的问题在运行时是不好的行为/输出,这意味着问题中的代码是虚构的,未编译成问题形式的类型,所以无论它有什么语法错误不是问题的原因。 –

+0

我已经试过了代码,我得到的唯一问题是括号,所以我想我宁愿建议他,他有一些问题,其他人工作很好。 –

0

它实际上更简单 你说“原始数字是float = 22”现在,请记住,obj-c运行时类可能与已声明的运行时类不同,并且当你用实际的intge实例化你的float变量时r值 - 它是运行时的整数值!您应该将其更改为以下其中一项:
float someFloatValue = 22f;
float someFloatValue = 22.0;
float someFloatValue =(float)22; (不知道一个想法)

快乐编码...

相关问题