2012-09-17 40 views
3

我知道有一個「硬」的方法來做到這一點(並不難,但不是直接)。在UILabel中顯示一個有符號的浮點數

我顯示一個浮動值作爲標籤的百分比方式:

myLabel.text = [NSString stringWithFormat:@"%.1f%%", myFloat]; 

我想迫使標籤顯示浮動的跡象。當然,如果值是負值,它會自動顯示「 - 」。我知道我能做到這一點使用該類型的方法:

-(NSString *) stringFromFloat: (float) theFloat { 

    if (theFloat > 0) return [NSString stringWithFormat: @"+%.1f%%", theFloat]; 
    else return [NSString stringWithFormat: @"%.1f%%", theFloat]; 
} 

但是,這將意味着每次我需要顯示浮點值時調用[self stringFromFloat:aFloat];。我知道使用這種解決方案是「更好」,因爲它降低了重複使用的行數,但如果我的標籤不全都顯示相同的小數位數,則stringFromFloat:可能會快速增長...

所以我的問題是:有沒有一個「簡單」和標準的方式來做到這一點?像一個NSString格式化器或什麼的?例如,用@"%sign%.1f%%"之類的東西替換@"%.1f%%"

如果沒有什麼直的,就像stringFromFloat:這樣的最佳解決方案?

謝謝!

回答

4

你並不需要做格式的符號部分 - 它可以是參數化的,就像這樣:

myLabel.text = [NSString stringWithFormat:@"%@%.1f%%", myFloat<0 ? @"" : @"+", myFloat]; 

即使你想要把它的格式,格式字符串可以在準備一個表達式:

myLabel.text = [NSString stringWithFormat:myFloat<0 ? @"%.1f%%" : @"+%.1f%%", myFloat]; 
+0

好吧,它的效果很好!我用了第一個,它是完美的。只是爲了一般的知識,這個「動作」是如何調用的(具有類似*開關的比較部分)?它看起來像塊,但我不知道如何命名它?非常感謝您的快速回答! – rdurand

+1

@rdurand這是[conditional or ternary operator](http://en.wikipedia.org/wiki/%3F:#C),在Objective C和C/C++/Java/C#中是相同的。它被稱爲「三元」,因爲它需要三個操作數 - 一個條件,一個「如果爲真」表達式,以及一個「如果爲假」表達式。 – dasblinkenlight

+0

非常感謝。我會牢記這一點! :) – rdurand