2012-03-26 37 views
1

我有一個類包含各種類型的數值。在這個類中,我有幾個幫助器方法,用於輸出描述符文本以在我的應用程序中顯示。構造一個動態格式化字符串,對於固定寬度的浮點值

此描述符文本應始終顯示爲整數或浮點數,具體取決於特定實例的定義。

該類有一個屬性DecimalWidth,我用它來確定顯示多少個小數。我需要幫助編寫一行代碼來顯示數值,但是有一個固定的小數位數(0是可能性,在這種情況下,該值應該顯示爲整數)。

我知道我可以返回一個值,如​​,但我的問題是我需要用值DecimalWidth替換格式字符串中的'2'。

我可以想到解決這個問題的幾種方法。我可以將一個字符串連接在一起,這就是輸出字符串行的格式字符串。或者,我可以在格式字符串中創建一個格式字符串。

這些解決方案聽起來很可怕,看起來效率很低,但也許這些是我擁有的最佳選擇。

是否有一種優雅的方式來構造一個動態格式化字符串,其中輸出是一個固定的小數寬度數字,但指定的小數寬度是動態的?

+2

[內部printf風格格式化功能可變的內插(指可能重複http://stackoverflow.com/questions/8761527/variable-插值內,printf風格的格式化函數) – 2012-03-26 22:54:32

回答

2

但是,這個問題的一個解決方案肯定是由@lulius caesar提出的問題, 但是一個好方法也是使用NSNumberFormatter。下面是一個示例代碼可以使用以產生具有固定的十進制數的十進制值

NSNumberFormatter *numberFormatter=[[NSNumberFormatter alloc] init]; 
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
    [numberFormatter setMinimumFractionDigits:DecimalWidth]; 
    [numberFormatter setMaximumFractionDigits:DecimalWidth]; 
    NSString * decimalString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:self.value]]] 
5

這聽起來不可怕對我來說效率低下。

[NSString stringWithFormat:[NSString stringWithFormat:@"%%.%df", DecimalWidth], self.Value] 

事實上,我認爲這是相當優雅。