2011-06-09 17 views
3

比方說,我有一個int值,表示集合中的行數,並且我想確定持有集合所需的頁面數量,以給出一定的頁面大小。關於Math.Round在C#中的簡單問題

因此,如果我的頁面大小爲20,集合大小爲89,則需要5頁。

Math.Round函數如何獲得我需要的功能?我需要四捨五入到下一個整數,而不是最近的整數。

感謝您的建議。

+0

可能重複[我怎樣才能確保整數的除法總是四捨五入?](http://stackoverflow.com/questions/921180/how-can-i-ensure-that-整數除法 - 總是舍入) – 2011-06-09 19:50:25

+0

我不認爲這是重複的。 OP的要求要簡單得多。他不在乎過度投擲。 – Brian 2011-06-10 14:46:34

回答

11

根本不想使用Math.Round()。您應該使用Math.Ceiling(),這將返回最小的整數值比雙傳入更大:

var pageSize = 20D; 
var pages = Math.Ceiling(collection.Count()/pageSize); 
+0

好吧,Math.Ceiling!它顯示:錯誤10在以下方法或屬性之間的調用是不明確的:'​​System.Math.Ceiling(decimal)'和'System.Math.Ceiling(double)' – frenchie 2011-06-09 18:54:30

+0

@frenchie - 你是否抓住了我的更新?確保你指定pageSize爲double。這將解決問題。 – 2011-06-09 18:55:54

+0

小修正:'Math.Ceiling()'返回大於或等於傳入的值的最小整數值(這當然是OP需求的正確行爲)。值得注意的是'Math.Ceiling()'返回的整數值不是一個整數類型:它可以是'double'或'decimal',這取決於調用哪個超載。 – phoog 2011-12-30 19:46:34

4

Math.Ceiling()是你在找什麼,我相信。

3

你可以做的工作在雙打和使用Math.Ceiling,正如其他人說。但爲什麼?你可以完全用整數算術完成這項工作。

但是,正如你會看到如果你閱讀所有的熱鬧的評論這裏的所有答案,有時你必須嘗試五六次才能得到正確的代碼。

How can I ensure that a division of integers is always rounded up?

+1

在'double'上使用'Math.Ceiling'會得到簡短,熟悉且易於閱讀的代碼。我懷疑'double'的使用會導致性能瓶頸。我認爲避免浮點運算只會使解決方案複雜化。 – Brian 2011-06-10 14:53:44