我想在一個簡單的計算器程序打印花車點的iOS:在Objective C:打印浮點數,因爲它是
如果計算結果爲5.555123125,然後打印準確5.555123125。 如果結果是1.2,那麼1.2。 如果2.555,則2.555。不是2.56或不是2.555000。
沒有零填料,沒有扔掉,沒有舍入或關閉。就這樣。
嘗試使用%f格式化,但我必須指定數字的位數:如%10.4f。 嘗試了%g,但它根據位數進行了自動更改。
就這樣,這很難嗎?
我想在一個簡單的計算器程序打印花車點的iOS:在Objective C:打印浮點數,因爲它是
如果計算結果爲5.555123125,然後打印準確5.555123125。 如果結果是1.2,那麼1.2。 如果2.555,則2.555。不是2.56或不是2.555000。
沒有零填料,沒有扔掉,沒有舍入或關閉。就這樣。
嘗試使用%f格式化,但我必須指定數字的位數:如%10.4f。 嘗試了%g,但它根據位數進行了自動更改。
就這樣,這很難嗎?
NSNumber * test = [NSNumber numberWithDouble:5.555123125];
NSLog(@"number = %@", test);
似乎工作。
您應該嘗試使用%lf
而不是%f
作爲雙打。
'%lf '在'printf'(或'NSLog')中使用時與'%f'相同:「長度修飾符及其含義是:'l' ...對後面的'a','A'沒有影響,'e','E','f','F','g'或'G'轉換說明符「。 (C99,§7.19.6.1) –
單精度浮點數(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);
瞭解更多關於浮點運算:
不錯。解決了。但numberWithFloat不起作用。可能它與內部結構有關...... – user1071023
當然,float是一個二進制格式,佔用32位(4字節),其有效位數的精度爲24位(約7位十進制數字)。 (http://en.wikipedia.org/wiki/Floating_point#Range_of_floating-point_numbers)因此,5.555123125可能會被截斷爲5.555123,例如 – Zoleas
也請注意檢查答案是否正確,如果是;) – Zoleas