Jaki jest najlepszy sposób konwersji a double
na int
? Czy należy użyć odlewu?
c#
.net
casting
type-conversion
user496949
źródło
źródło
etc.
:)Odpowiedzi:
Możesz użyć rzutowania, jeśli chcesz zachować domyślne zachowanie obcinania w kierunku zera. Alternatywnie, możesz użyć
Math.Ceiling
,Math.Round
,Math.Floor
etc - choć nadal będziesz potrzebować obsady później.Nie zapominaj, że zakres
int
jest znacznie mniejszy niż zakresdouble
. Rzutowanie zdouble
doint
nie zgłosi wyjątku, jeśli wartość jest poza zakresemint
w niesprawdzonym kontekście, podczas gdy wywołanieConvert.ToInt32(double)
will. Wynik rzutowania (w niesprawdzonym kontekście) jest jawnie niezdefiniowany, jeśli wartość jest poza zakresem.źródło
int
wynosi zawsze 32 bity, niezależnie od tego, czy używasz maszyny 32-bitowej, czy 64-bitowej.intVal = System.Convert.ToInt32(System.Math.Floor(dblVal));
using System;
na początku pliku, w którym to momencie może to byćintVal = Convert.ToInt32(Math.Floor(dblVal));
using
dyrektyw.jeśli używasz rzutowania, to znaczy,
(int)SomeDouble
że obcinasz część ułamkową. To znaczy, gdybySomeDouble
było 4,9999, wynikiem byłoby 4, a nie 5. Konwersja na wartość int nie zaokrągla liczby. Jeśli chcesz zaokrąglić, użyjMath.Round
źródło
Tak czemu nie?
Korzystanie z
Convert
klasy również działa dobrze.źródło
Convert.ToInt32
to najlepszy sposób na konwersjęźródło
Najlepszym sposobem jest po prostu użycie
Convert.ToInt32
. Jest szybki i dobrze zaokrągla.Po co to komplikować?
źródło
Oto pełny przykład
Jeśli chcesz zaokrąglić liczbę do najbliższej liczby całkowitej, wykonaj następujące czynności:
źródło
Myślę, że najlepszy sposób to
Convert.ToInt32
.źródło
int myInt = (int) Math.Ceiling (myDouble);
źródło
Moje sposoby to:
źródło
double_value = 0.1
jeśli chcesz wysłać to na etykietę lub coś w tym stylu, a nie chcesz żadnego ułamkowego składnika, to jest najlepszy sposób
jeśli chcesz tylko z 2, i zawsze tak jest
źródło