2012-03-21 10 views

Odpowiedz

37

Istnieją pewne różnice między odlewania do integralnego rodzaju i obsługiwanie Math.floor:

  1. Podczas odlewania do integralnego typu, będzie koniec z integralnym typem (oczywiście). Więc jeśli chcesz zachować liczbę jako podwójną, użycie Floor jest łatwiejsze.
  2. W wyniku 1 rzut nie zadziała poprawnie, jeśli podana liczba jest zbyt duża, aby mogła być reprezentowana przez dany typ całkowy (podwójny może reprezentować znacznie większą liczbę niż długa).
  3. Runda podłogowa w kierunku ujemnej nieskończoności. Rzucanie rund w kierunku zera.
11

Math.Floor jest zasadniczo różny od operacji obcinanie, ponieważ uchwyty ujemnych wartości inaczej. Math.Floor(-1.5) == -2.0, natomiast (int)-1.5 == -1.

19

Różni dla wartości ujemnych:

double num = -1.3; 
double floor = Math.Floor(num); // = -2 
long cast = (long)num; // = -1 
7

W uzupełnieniu do innych odpowiedzi, nie należy zapominać, że odlew może zawieść gdzie Floor uda:

decimal d = decimal.MaxValue; 

decimal f = Math.Floor(d); // succeeds 
long l = (long)d;    // fails 
1

Nawet jeśli masz do czynienia tylko z wartościami dodatnimi, to jest wartość nie double zawsze pasuje do long.

Zobacz zakresy long i double na stronie MSDN.

+3

Chociaż jest to prawdą, funkcja 'Floor' nie będzie miała wpływu na wartości, które nie mieszczą się w' long'. – Gabe