2011-08-21 153 views
2

我有一個浮點,我想舍入或舍入到最近的整數。向上或向下舍入

例如:

1.4 = 1.0 1.77 = 2.0 1.1 = 1.0

等...

我在目標C這樣做,所以我想我需要一個標準數學函數...會在附近做什麼?

+0

[Objective-C Float Rounding]的可能重複(http://stackoverflow.com/questions/4702408/objective-c-float-rounding)或[如何round關閉浮動值?](http://stackoverflow.com/questions/5594116/objective-c-how-to-round-off-float-values) –

+0

@andrewx我低估了你的答案,原因我在評論中解釋。無論它是否「在許多書籍中教授」,您建議依靠鑄造是一個糟糕的建議。 – benzado

回答

8

您可以使用math.h中定義的任何標準C庫數學函數。 nearbyintf會工作,如roundfceilffloorf,這取決於你想要什麼。

如果您選擇在編輯器中雙擊它們,Xcode將向您顯示這些功能的文檔(UNIX手冊頁)。

4

使用

double a = 2.3; 
double b = round(a); 

你可以找到全面,math.h中其他數學函數

-2

老派的方式是添加0.5〜數,然後讓它截斷:

int x = (int) (someFloat + 0.5); 
+0

你的解決方案沒有考慮負數(如果是的話,你基本上會重寫'roundf'函數)。 – benzado

0

四捨五入非常容易實現,因爲將一個值作爲int來截斷數字的小數部分。讓0 <= x < 1。如果小數部分小於x並且四捨五入到最接近的整數(如果小數部分大於或等於x),那麼如果要將所有值舍入到最接近的整數,則只需要計算:

int roundedValueBasedOnX = (int) (value + (1 - x)); 

舉個例子,如果x = 0.2,那麼我們有:

1)value = 9.4,應該四捨五入到10

int roundedValueBasedOnX = (int) (9.4 + (1 - 0.2)) = (int) (9.4 + 0.8) = (int) (10.2) = 10; 

2)value = 3.1,應該輪3

int roundedValueBasedOnX = (int) (3.1 + (1 - 0.2)) = (int) (3.1 + 0.8) = (int) (3.9) = 3; 

如果x = 0.7,那麼我們有:

3)value = 9.4,應該四捨五入爲9

int roundedValueBasedOnX = (int) (9.4 + (1 - 0.7)) = (int) (9.4 + 0.3) = (int) (9.7) = 9; 

4)value = 3.8,應該輪4

int roundedValueBasedOnX = (int) (3.8 + (1 - 0.7)) = (int) (3.8 + 0.3) = (int) (4.1) = 4; 

希望有幫助!

2

每當四捨五入時,考慮負數是否可能。如果是這樣,傳統的int(int)(x + 0.5)可能不會做你想做的事情,並且循環函數可能會更好。例如,round(-1.5)= 2.