2013-03-16 103 views
2

在我的代碼中,我有一個雙號2.555。我通過NSLog使用%.2f來顯示它有2.55,但輸出是2.56。這是我不想要的數字的四捨五入!我知道有ceil(double)floor(double)被使用,但他們不幫助我在這裏。防止雙數舍入

double div = a/b; 
NSLog(@"DIV = %.f", div); 
+0

你可以在這裏發佈你的代碼嗎? – Aravindhan 2013-03-16 12:43:46

+0

問題是,爲什麼你不想讓數字四捨五入,但只是截斷了?對於'2.555',輸出'2.55'無效。 – Sulthan 2013-03-16 13:36:33

回答

1

沒有看到您的代碼是不可能找到錯誤。下面的代碼將根據您的需要工作。

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setRoundingMode:NSNumberFormatterRoundDown]; 
[numberFormatter setMaximumFractionDigits:2]; 
NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble:2.555]]; 
NSLog(@"%@",numberAsString); 
[numberFormatter release]; 

,你可以參考,這個鏈接NSNumberFormatter

+0

哦謝謝它確實工作。難道不能以更簡單的方式完成嗎?或者我應該始終記住NSNumberFormatter? – HusseinB 2013-03-16 12:54:25

+0

問題在於打印格式說明符如何在C中工作。這是一個合理的Objective-C解決方案。 – uchuugaka 2013-03-16 12:56:43

+0

它不能以更簡單的方式完成然後這(據我所知)。你必須爲此使用NSNumberFormatter。 – Aravindhan 2013-03-16 12:59:00

0

我覺得還有一個更簡單的方法來做到這一點。 如果我正確理解你,你不想使用floor(),因爲你想保持「div」的內容不變。如果這是正確的,那麼你可以做到以下幾點。 NSLog(@「DIV =%.2f」,trunc(div * 100)/ 100);
NSLog(@「DIV =%.2f」,floor(div * 100)/ 100);

以上將在第二秒後刪除小數點,但僅用於顯示。 「div」的內容不變。

+0

這不起作用。浮點數字不太容易工作。 – Sulthan 2013-03-16 13:36:05

+0

大部分時間都適用,特別是當數學不會將您的號碼超過尾數限制時。不過我同意,在裂縫開始顯示之前,你只能推浮點數。 – hvanbrug 2013-03-16 14:15:06