2011-11-29 55 views
2

我想在一個簡單的計算器程序打印花車點的iOS:在Objective C:打印浮點數,因爲它是

如果計算結果爲5.555123125,然後打印準確5.555123125。 如果結果是1.2,那麼1.2。 如果2.555,則2.555。不是2.56或不是2.555000。

沒有零填料,沒有扔掉,沒有舍入或關閉。就這樣。

嘗試使用%f格式化,但我必須指定數字的位數:如%10.4f。 嘗試了%g,但它根據位數進行了自動更改。

就這樣,這很難嗎?

回答

2
NSNumber * test = [NSNumber numberWithDouble:5.555123125]; 
NSLog(@"number = %@", test); 

似乎工作。

+0

不錯。解決了。但numberWithFloat不起作用。可能它與內部結構有關...... – user1071023

+0

當然,float是一個二進制格式,佔用32位(4字節),其有效位數的精度爲24位(約7位十進制數字)。 (http://en.wikipedia.org/wiki/Floating_point#Range_of_floating-point_numbers)因此,5.555123125可能會被截斷爲5.555123,例如 – Zoleas

+0

也請注意檢查答案是否正確,如果是;) – Zoleas

-2

您應該嘗試使用%lf而不是%f作爲雙打。

+1

'%lf '在'printf'(或'NSLog')中使用時與'%f'相同:「長度修飾符及其含義是:'l' ...對後面的'a','A'沒有影響,'e','E','f','F','g'或'G'轉換說明符「。 (C99,§7.19.6.1) –

0

單精度浮點數(float)數字有32位,其中8位用於指數。這留下了24個有效位,它給你日誌(2 )≈7個重要的十進制數字。如果您需要更多有效數字,請上移至雙精度浮點數(double),這將爲您提供64位,指數爲11,尾數爲53。 A double因此提供了日誌(2 )≈15個重要的十進制數字。

請注意,任何提供IEEE單精度和雙精度浮點類型的語言都是如此,而不僅僅是Objective-C。此外,printf風格的格式說明了double%d,所以這應該在Objective-C正常工作,而不需要的NSNumber:

NSLog(@"result = %d", 5.555123125); 

瞭解更多關於浮點運算: