2013-05-14 105 views
0

我想指定我的NSString我的浮動指針數的準確性,但我不斷收到此錯誤:指定浮點數精度的NSString

Format specifies type 'double' but the argument has type 'NSString *'

這裏是我的代碼:

NSString *tmplabel = [tmp description]; 
temp.text = [NSString stringWithFormat: @"%.fº", tmplabel]; 

我在做什麼錯了?

+0

tmplabel是NSString的一個對象。所以,你不能使用%f。使用%@作爲NSString的對象 – DharaParekh 2013-05-14 11:13:22

+0

你想要輸出什麼? – DharaParekh 2013-05-14 11:14:17

+0

@DharaParekh感謝您的評論,但如果我使用%@,那麼我無法控制浮點數的準確性。基本上,該數目目前爲8.xx我想它是8.x所以我需要使用%f ?? – Supertecnoboff 2013-05-14 11:14:52

回答

3

您的tmplabel是NSString,它應該是double

如果您確定tmplabel擁有一個可以解析爲簡單雙數的數字,那麼您可以在其上使用doubleValue。否則,你可能需要做錯誤處理等

這裏更詳盡的轉換是一個樸實的簡單的方法來做到這一點:

temp.text = [NSString stringWithFormat: @"%.fº", [tmplabel doubleValue]]; 

doubleValue方法(和它的近親integerValue和類似)解釋了字符串的內容,如果字符串的開頭可以作爲數字讀取,它將爲您轉換並將其作爲適當的基本類型返回。在你的情況下,原始類型是double

您無法從對象(任何NS *)進行類型轉換爲原始類型,但始終必須經過某種解釋或編程轉換。

最後,請注意,直接使用doubleValue用戶輸入的快捷方式,你會想重遊,在某些時候,所以要記在腦子裏重新實現它使用一個數字格式或NSScanner更高版本。想知道爲什麼,試着輸入非數字數據,看看你對結果是否滿意。

最後,要按照您的要求準確設置精確度(即小數點後的小數位數),請參見下面的王子answerDharaParekh's

+0

這工作完美,謝謝。所以基本上你的類型投在這裏? – Supertecnoboff 2013-05-14 11:17:46

+0

非常感謝您的解釋。非常翔實的:) – Supertecnoboff 2013-05-14 13:27:16

2

試試這個

NSString *tmplabel = [tmp description]; 
temp.text = [NSString stringWithFormat: @"%.f", [tmplabel doubleValue]]; 
2

試試這個:

NSString *tmplabel = [tmp description]; 
float tmp = [tmplabel floatValue]; 
temp.text = [NSString stringWithFormat: @"%.1f", tmp]; 
0
{ 
temp.text = [NSString stringWithFormat: @"%.1f", tmplabel]; 
} 

您可以更改數量盈的F指定的精度。