2016-04-05 8 views
7

私は荒い一日を過ごしていますが、何かが正しく加算されていません。私のC#のコードでなぜC#Math.Ceilingは切り捨てられますか?

、私はこれを持っている:(。両方の値がint値である)(int)TotalRecordCount = 12と私は取得しています結果は2
ある(int)PageSize = 5.

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

私の計算では、12/5 = 2.4です。私はMath.Ceilingは常に丸めて、この場合、私に3を与えるだろうと思った?私はこれを行う場合

PSは、:

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

を私はメッセージが表示されます:

Math.Ceiling(this.TotalRecordCount/this.PageSize)
呼び出しは、以下の間であいまいですメソッドまたはプロパティ:
'System.Math.Ceiling(10進)'および 'System.Math.Ceiling(double)'

答えて

17

あなたは「切り捨て」を参照してください:あなたは、小数点除算を使用するように小数にオペランドの少なくとも一つを変換する必要があります。

あなたが行うと、この

(this.TotalRecordCount/this.PageSize) 

それは整数の除算であり、その結果が切り捨てintです。遅すぎてdecimalにキャストできません。この問題を解決するには

、分割前のキャスト:

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

TotalRecordCountおよびPageSizeはintでint divisionは切り捨てられます。切り捨てがMath.Ceilingに達する前に起こるので

Math.Ceiling((decimal)this.TotalRecordCount/this.PageSize)); 
関連する問題