Jaki jest najlepszy sposób przekonwertowania double
na int
? Czy należy użyć odlewu?konwersja podwójna na int
Odpowiedz
Możesz użyć rzutowania, jeśli chcesz zachować domyślne zachowanie skrócone do zera. Alternatywnie możesz użyć Math.Ceiling
, Math.Round
, Math.Floor
itd. - jednak nadal będziesz potrzebować rzutowania.
Nie zapominaj, że zakres int
jest znacznie mniejszy niż zakres double
. Odlewanie z double
do int
nie spowoduje wyjątku, jeśli wartość jest poza zakresem int
w niezaznaczonym kontekście, podczas gdy wywołanie Convert.ToInt32(double)
spowoduje. Wynik rzutowania (w niezaznaczonym kontekście) jest jawnie niezdefiniowany, jeśli wartość jest poza zakresem.
Zastanawiam się, czy w maszynie 64-bitowej Convert.ToInt32 nie jest już OK? – user496949
@user: Rozmiar 'int' jest zawsze 32-bitowy, niezależnie od tego, czy używasz maszyny 32- czy 64-bitowej. – Joren
A podwójne mogą być znacznie większe niż 64-bitowe int. –
Tak, dlaczego nie?
double someDouble = 12323.2;
int someInt = (int)someDouble;
Praca z klasą Convert
działa również.
int someOtherInt = Convert.ToInt32(someDouble);
Convert.ToInt32
jest najlepszym sposobem konwersji
Jest to typowo niebezpieczna funkcja, ponieważ akceptuje wszystko. –
jeśli używasz obsady, czyli (int)SomeDouble
można obciąć część ułamkową. Oznacza to, że jeśli SomeDouble
były 4,9999, wynik byłby 4, a nie 5. Konwersja do int nie zaokrągla liczby. Jeśli chcesz zaokrąglenia Użyj Math.Round
Moje sposoby to:
- Convert.ToInt32(double_value)
- (int)double_value
- Int32.Parse(double_value.ToString());
Nie sądzisz, że trzeci sposób jest niepotrzebnie skomplikowany i wolny? –
Trzeci nie będzie działał z podwójnymi częściami ułamkowymi. np. 'double_value = 0.1' –
Myślę, że możesz użyć Math.Floor. – lindexi
Myślę, że najlepszym sposobem jest Convert.ToInt32
.
Powyżej znajduje się pełna przykład
class Example
{
public static void Main()
{
double x, y;
int i;
x = 10.0;
y = 3.0;
// cast double to int, fractional component lost (Line to be replaced)
i = (int) (x/y);
Console.WriteLine("Integer outcome of x/y: " + i);
}
}
Jeśli chcesz zaokrąglić liczbę do bliższej całkowitej wykonaj następujące czynności:
i = (int) Math.Round(x/y); // Line replaced
Najlepszym sposobem jest po prostu użyć Convert.ToInt32
. Jest szybki i runduje poprawnie.
Dlaczego to bardziej skomplikowane?
label8.Text = "" + years.ToString("00") + " years";
kiedy chcesz wysłać go na etykiecie, czy coś, a ty nie chcesz żadnego komponentu ułamkową, to jest najlepszy sposób
label8.Text = "" + years.ToString("00.00") + " years";
jeśli chcesz tylko 2, a zawsze jest tak, że
int myInt = (int) Math.Ceiling (myDouble);
- 1. Konwersja podwójna tablica na Double ArrayList
- 2. podwójna konwersja do liczby całkowitej w java
- 3. Android: konwersja kolorów na Int
- 4. Konwersja std :: wstring na int
- 5. Konwersja BIGINT UNSIGNED na INT
- 6. konwersja int na std :: string
- 7. Konwersja Haskell Float na Int
- 8. Konwersja int ** do const int **
- 9. Konwersja int do CGFloat
- 10. Konwersja typu Int
- 11. Konwersja Json.Net JValue int
- 12. Konwersja int do booleans
- 13. niejawna konwersja float/int
- 14. Konwersja z edytowalnych na int w android
- 15. Konwersja Swift 3 z Int na ciąg
- 16. Konwersja String na int tablicy w java
- 17. konwersja int na krótki w C
- 18. Konwersja float64 na int w Go
- 19. Konwersja strumienia int na char w java
- 20. Konwersja wartości na int w F #
- 21. Konwersja z bajtu na int w java
- 22. Konwersja int na bool z Json.NET
- 23. Konwersja int na hex z zerami wiodącymi
- 24. Konwersja BitSet int
- 25. Konwersja int int *, a następnie z powrotem do int
- 26. Szybka metoda zaokrąglić podwójna do 32-bitowego int wyjaśnił
- 27. Konwersja z int RGB, HEX
- 28. Podwójna precyzja OpenCL inna niż podwójna precyzja procesora
- 29. Konwersja 16-bitowego int podpisania na 2-bajtowe?
- 30. Konwersja ciągu na int za pomocą funkcji ToInt
zdefiniować "najlepiej". zależy, czy chcesz zaokrąglić w górę/w dół, itp. – RPM1984
@ RPM1984: Zdefiniuj 'etc.' :) –
@Armen - touche' :) Tak naprawdę to nie ma znaczenia - Skeet jest tutaj, nic się nie liczy. – RPM1984