2016-04-05 18 views
7

Mam ciężki dzień, ale coś nie sumuje się poprawnie.Dlaczego C# Math.Cheiling round down?

W moim kodu C#, mam to: (. Obie wartości są int wartości)

Math.Ceiling((decimal)(this.TotalRecordCount/this.PageSize)) 

Gdzie (int)TotalRecordCount = 12 i (int)PageSize = 5. Wynik jestem coraz to 2.

Według moich obliczeń 12/5 = 2,4. Myślałem, że Math.Ceiling zawsze zaokrągli w górę, w tym przypadku, daj mi 3?

PS, jeśli robię to:

Math.Ceiling(this.TotalRecordCount/this.PageSize) 

ja dostaję komunikat:

Math.Ceiling (this.TotalRecordCount/this.PageSize)
Wywołanie jest niejednoznaczna między następujące metody lub właściwości:
"System.Math.Ceiling (dziesiętnie)" i "System.Math.Ceiling (podwójne)"

Odpowiedz

17

Widzisz „zaokrąglenie w dół”, ponieważ dzieje się przed dotarciem do obcięcia Math.Ceiling.

Kiedy robisz to

(this.TotalRecordCount/this.PageSize) 

Jest to podział całkowitą, a jego wynik jest obcinany int; jest już za późno, aby przesłać go na numer decimal.

Aby rozwiązać ten problem, odlany przed podziałem:

Math.Ceiling(((decimal)this.TotalRecordCount/this.PageSize)) 
7

Ponieważ TotalRecordCount i PageSize jest int, a int podział zaokrągla w dół. Trzeba przekształcić przynajmniej jeden z argumentów na dziesiętne użyć podział dziesiętnych:

Math.Ceiling((decimal)this.TotalRecordCount/this.PageSize));