Czy (int)myDouble
różni się od (int)Math.Truncate(myDouble)
?Czy (int) myDouble kiedykolwiek różni się od (int) Math.Truncate (myDouble)?
Czy jest jakiś powód, dla którego powinienem preferować jeden nad drugim?
Czy (int)myDouble
różni się od (int)Math.Truncate(myDouble)
?Czy (int) myDouble kiedykolwiek różni się od (int) Math.Truncate (myDouble)?
Czy jest jakiś powód, dla którego powinienem preferować jeden nad drugim?
Math.Truncate
jest przeznaczony do sytuacji, gdy zachodzi potrzeba zachowania wyniku jako podwójnego bez części ułamkowej. Jeśli chcesz zakodować go w int, po prostu użyj rzutowania bezpośrednio.
Edit: Dla porównania, tutaj jest odpowiednia dokumentacja od „Explicit Numeric Conversions Table”:
Podczas konwersji z wartości podwójnego lub pływaka do integralnego typu, wartość jest obcięty.
Jak podkreślił Ignacio Vazquez-Abrams(int)myDouble
zawiedzie w taki sam sposób jak (int)Math.Truncate(myDouble)
gdy myDouble jest zbyt duża.
Tak więc nie ma różnicy w wydajności, ale (int)myDouble
działa szybciej.
+1: Ta odpowiedź podnosi odpowiedni punkt. Poza tym, musisz usunąć rzutowanie '(int)' z obciętego podwójnego, ponieważ w przeciwnym razie znalazłbyś się w tej samej sytuacji. – Douglas
@Ignacio Vazquez-Abrams, masz rację. – dantuch
Nie można użyć '(long)', jeśli oczekiwaliśmy, że liczba będzie dość duża? – mpen
Moje naiwne przypuszczenie byłoby takie, że ta ostatnia jest jednoznacznie zdefiniowanym aspektem API CLR, podczas gdy pierwsza jest zależna od specyfikacji języka, mimo że jest niejawnie taka sama. –
Myślę, że użycie 'Math.Truncate' jest niepotrzebnym krokiem. – Oded
'Math.Truncate' jest przeznaczony do sytuacji, gdy zachodzi potrzeba zachowania wyniku jako' double' bez części ułamkowej. Jeśli chcesz go przyłączyć do 'int', użyj obsady. – Douglas