Warum wird C # Math.Ceiling abgerundet?

7

Ich habe einen harten Tag, aber etwas summiert sich nicht richtig.

In meinem C # -Code habe ich Folgendes:

%Vor%

Wo (int)TotalRecordCount = 12 und (int)PageSize = 5. Das Ergebnis, das ich bekomme, ist 2.
(Beide Werte sind int -Werte.)

Nach meinen Berechnungen 12/5 = 2.4. Ich dachte, Math.Ceiling würde immer zusammenkommen, und in diesem Fall gib mir 3?

PS, wenn ich das tue:

%Vor%

Ich bekomme die Nachricht:

  

Math.Ceiling (this.TotalRecordCount / this.PageSize)
  Der Aufruf ist zwischen den folgenden Methoden oder Eigenschaften mehrdeutig:
  'System.Math.Ceiling (dezimal)' und 'System.Math.Ceiling (double)'

    
M Kenyon II 05.04.2016, 15:40
quelle

2 Antworten

17

Sie sehen "Abrunden", weil die Kürzung vor Erreichen von Math.Ceiling erfolgt.

Wenn Sie dies tun

%Vor%

Es ist eine ganzzahlige Division und das Ergebnis ist eine abgeschnittene int ; es ist zu spät, um es in decimal zu übertragen.

Um dieses Problem zu beheben, werfen Sie vor der Teilung:

%Vor%     
dasblinkenlight 05.04.2016, 15:43
quelle
7

Weil TotalRecordCount und PageSize int ist, wird die int-Division abgerundet. Sie müssen mindestens einen der Operanden in dezimal umwandeln, um die Dezimaldivision zu verwenden:

%Vor%     
IllidanS4 05.04.2016 15:42
quelle

Tags und Links