2011-08-01 77 views
12

我需要找到兩個整數的除法,並將其圓下一上部整數數學舍入到總是上部整數

e.g X = 7/Y = 5 = 2;這裏x和y總是比0

更大這是我當前的代碼

int roundValue = x % y > 0? x/y + 1: x/y; 

有沒有什麼更好的方法來做到這一點?

+0

重複? http://stackoverflow.com/questions/921180/how-can-i-ensure-that-a-division-of-integers-is-always-rounded-up/926806 – chrisaut

回答

36

可能使用Math.Ceiling ...但這將需要轉換爲/從double值。

另一種替代方法是使用Math.DivRem同時執行兩個部分。

public static int DivideRoundingUp(int x, int y) 
{ 
    // TODO: Define behaviour for negative numbers 
    int remainder; 
    int quotient = Math.DivRem(x, y, out remainder); 
    return remainder == 0 ? quotient : quotient + 1; 
} 
+0

謝謝@Jone請添加_out remaining_作爲參數完成你的回答 – Damith

+0

@DSW:Doh :)完成。 –

+0

仍然沒有編譯;) – porges

1

使用ceil()函數。 它給出了較高的值。

18

嘗試(int)Math.Ceiling(((double)x)/y)

3

不知道什麼是更好的方式或如何定義一個更好的方式(如果在性能方面,你必須運行測試,看看哪個會更快),但這裏是我的解決方案:

int roundValue = x/y + Convert.ToInt32(x%y>0); 

ps

仍然必須以某種方式處理neg。號碼......海事組織這是最簡單的。

6

所有解決方案看起來太難。對於上限值x/y,請使用這一個

(x + y - 1)/y 
+0

'添加另一個組,但如果您已經有一個完整的組',減去一個 - 好主意。只要整數是正數,似乎沒有問題。感謝分享! – jacoblambert