2012-03-21 8 views

risposta

37

ci sono alcune differenze tra casting per un tipo integrale e utilizzando Math.floor:

  1. Nel cast a un tipo integrale, vi ritroverete con un tipo integrale (ovviamente). Quindi se vuoi mantenere il numero come doppio, usare Floor è più facile.
  2. Come conseguenza di 1, il cast non funzionerà correttamente se il numero dato è troppo grande per essere rappresentato dal tipo integrale dato (un doppio può rappresentare numeri molto più grandi di un lungo).
  3. Pavimenti verso l'infinito negativo. Getti rotondi verso lo zero.
11

Math.Floor è un'operazione fondamentalmente diverso da troncamento perché gestisce numeri negativi diverso. Math.Floor(-1.5) == -2.0, mentre (int)-1.5 == -1.

19

Si differenzia per i valori negativi:

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

In aggiunta alle altre risposte, non bisogna dimenticare che di fusione potrebbe non riuscire dove Floor sarebbe successo:

decimal d = decimal.MaxValue; 

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

Anche se si sta solo trattare con valori positivi, un valore double non lo fa sempre in forma in un long.

Vedere intervalli di long e double su MSDN.

+3

Mentre questo è vero, la funzione 'Floor' non avrà effetto su valori che non rientrano in un' long'. – Gabe

Problemi correlati