2014-04-17 82 views
1

我試圖用尾部零得到2位小數的數字。Objecive C在小數點後刪除尾部零點

e.g

11.633-> 11.63 
11.630-> 11.63 
11.60-> 11.6 
11-> 11 
12928.98-> 12928.98 

此我下面寫線

#define kFloatFormat2(x) [NSString stringWithFormat:@"%g", [[NSString stringWithFormat:@"%.2f", x] floatValue]] 

    NSNumber *number1 = [NSNumber numberWithDouble:12928.98]; 
    NSLog(@"number1:%@", number1); 
    NSString *string1 = kFloatFormat2([number1 floatValue]); 
    NSLog(@"string1:%@", string1); 

上述打印

NUMBER1的輸出:12928.98

字符串1:12929

爲什麼它爲string1打印12929值 我希望它爲12928.98。

+0

您還可以考慮使用一個(內聯)函數,而不是宏避免各種潛在的問題。 –

+0

爲什麼不使用'NSNumberFormatter'? – danielbeard

回答

3

您是否嘗試過使用一個數字格式化?

NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setUsesGroupingSeparator:NO]; 
[formatter setMaximumFractionDigits:fractionDigits]; 
[formatter setMinimumFractionDigits:fractionDigits]; 

現在做這樣的事情

NSNumber *x = @23423; 
NSString *value = [formatter stringFromNumber:x]; 
NSLog(@"number = %@, value); 
+0

感謝它的作品 –

3

你的宏是沒有意義的。只是使它:

#define kFloatFormat2(x) [NSString stringWithFormat:@"%.2f", [x floatValue]] 

其中xNSNumber。然後你會這樣稱呼它:

NSString *string1 = kFloatFormat2(number1); 

或者只是這樣做:

double x = 12928.98; 
NSLog(@"number = %.2f", x); 
+0

你可以用'NSNumber'來做'%f'嗎? – Rich

+0

@密碼這是一個對象,所以你必須使用'%@'。使用'%f'和'NSNumber'的唯一方法是在'NSNumber'對象上調用'floatValue'或'doubleValue'。 – rmaddy

+0

我不這麼認爲 - 「其中x是一個NSNumber。」然後你有'%f'無論如何你現在已經改正了你的答案! – Rich