Jak przekonwertować podwójne do najbliższego int?Jak mogę przekonwertować double do najbliższej wartości całkowitej?
Odpowiedz
Zastosowanie Math.round()
, ewentualnie w połączeniu z MidpointRounding.AwayFromZero
np
Math.Round(1.2) ==> 1
Math.Round(1.5) ==> 2
Math.Round(2.5) ==> 2
Math.Round(2.5, MidpointRounding.AwayFromZero) ==> 3
double d = 1.234;
int i = Convert.ToInt32(d);
Uchwyty zaokrąglenie tak:
zaokrąglone do najbliższej 32-bitowej liczby całkowitej ze znakiem. Jeśli wartość jest w połowie długości między dwiema liczbami całkowitymi, zwracana jest liczba parzysta; czyli 4,5 jest konwertowany do 4, a 5,5 jest konwertowany do 6.
Znacznie lepiej, że 'Math.Round' jak zwraca int w razie potrzeby. – Keith
@Keith: Ale nieważnie zaokrągla ** even.5 ** to * even * zamiast na * even + 1 * ... –
@ robert-koritnik. Nie wiem, dlaczego jest to "nieprawidłowe". OP nie określił preferowanej reguły zaokrąglania, a "round .5 to nearest even" jest standardową regułą. Zawsze zaokrąglanie ma niepożądane efekty statystyczne. – Keith
double d;
int rounded = (int)Math.Round(d);
Zajmuję się kalkulator naukowy, że sport przycisk Int. Znalazłem następujące jest proste, niezawodne rozwiązanie:
double dblInteger;
if(dblNumber < 0)
dblInteger = Math.Ceiling(dblNumber);
else
dblInteger = Math.Floor(dblNumber);
Math.Round czasami wywołuje nieoczekiwane lub niepożądane skutki, a jawne konwersji do liczby całkowitej (przez gipsie lub Convert.ToInt ...) często powoduje błędne wartości dla liczb o wyższej precyzji. Powyższa metoda wydaje się zawsze działać.
nie zaokrągla w górę wszystkie wartości ujemne i zaokrągla wszystkie liczby dodatnie? To niekoniecznie jest liczbą całkowitą "neaerest". –
to nie jest najbliższa liczba. –
Biorąc pod uwagę 1,99, to zwraca 1,0. –
Można również użyć funkcji:
//Works with negative numbers now
static int MyRound(double d) {
if (d < 0) {
return (int)(d - 0.5);
}
return (int)(d + 0.5);
}
zależności od architektury to kilka razy szybciej.
To było dla mnie idealne, ponieważ Math.Round nie działał tak, jak chciałem. – Johannes
@ cullub tak to robi. Konwertuje podwójne d, do którego dołączono 0,5, na liczbę całkowitą. – Darrell
To jest moja preferowana metoda - działa w bardzo prosty sposób. O wiele krótszy i łatwiejszy do odczytania niż Math.Round (d, MidpointRounding.AwayFromZero) i bardziej zwięzły niż użycie instrukcji if, aby wybrać zaokrąglenie w dół lub zaokrąglenie w górę. AND, faktycznie zwraca liczbę całkowitą na końcu, a nie podwójne – binderbound
Wiem, że to pytanie jest stare, ale natknąłem się na niego w poszukiwaniu odpowiedzi na moje podobne pytanie. Pomyślałem, że podzielę się bardzo pożyteczną wskazówką, którą otrzymałem.
Podczas konwersji do int, po prostu dodaj .5 do swojej wartości przed downcastingiem. Ponieważ downcasting na int zawsze spada do niższej liczby (np. (Int) 1,7 = 1), jeśli twoja liczba wynosi .5 lub więcej, dodanie .5 spowoduje przejście do następnego numeru, a twój downcast do int powinien zwrócić poprawną wartość . (np. (int) (1,8 + 0,5) = 2)
Mam nadzieję, że ta odpowiedź jest przydatna każdemu.
Problem polega na próbie przekonwertowania wartości ujemnych w ten sposób. Na przykład -1.25 kończy się na 0. (-1.25 + 0.5 = 0.75, a po odrzuceniu do int jest 0). Musisz więc odjąć 0,5 od wartości ujemnych. – Eternal21
- 1. Runda do najbliższej liczby całkowitej
- 2. javascript - jak zaokrąglić do najbliższej liczby całkowitej
- 3. Zaokrąglanie liczby całkowitej do najbliższej wielokrotności innej liczby całkowitej
- 4. grupa pyton wykaz liczby całkowitej, z najbliższej wartości
- 5. Jak przekonwertować Double [], aby podwoić []?
- 6. Objective-C, jak przekonwertować double do int?
- 7. Jak zaokrąglić podwójną do najbliższej liczby całkowitej, a następnie przekonwertować na wartość zmiennoprzecinkową?
- 8. Jak zaokrąglić do najbliższej dziesiątki?
- 9. Jak przekonwertować Varchar na Double w sql?
- 10. Jak przekonwertować Int do Double na placu zabaw Swift?
- 11. Jak przekonwertować BigDecimal na Double w Javie?
- 12. Znajdowanie najbliższej wartości w data.table
- 13. Jak mogę przekonwertować Int do CString?
- 14. Jak zaokrąglić do liczby całkowitej w R?
- 15. Jak zaokrąglić wartość dziesiętną do najbliższej wartości 0,05?
- 16. Jak zaokrąglić w dół podwójną do najbliższej mniejszej int w C?
- 17. Runda do najbliższej piątki
- 18. zaokrąglenie do najbliższej 0,25 javascript
- 19. Najbardziej skuteczny sposób na znalezienie najbliższej liczby całkowitej w MySQL?
- 20. Haskell monada: IO [Double] do [IO Double]
- 21. Jak przekonwertować tablicy ciągów Double tablicy w jednej linii
- 22. C#: double [] [] i double [,]
- 23. Dlaczego DateTime.AddDays zaokrągla do najbliższej milisekundy?
- 24. Funkcja matematyczna do zaokrąglenia wartości do .0 lub .5
- 25. Runda do najbliższej .25
- 26. Zaokrąglanie do najbliższej setki
- 27. Przyciągaj do najbliższej ulicy
- 28. czy mimo to można przekonwertować z Double do BigInteger?
- 29. Zaokrąglanie liczb całkowitych do najbliższej wielokrotności
- 30. Python - zaokrąglić do najbliższej dziesiątki
Czy "Convert.ToInt32()" nie zrobi tego samego, czy też po prostu usuwa wszystko po przecinku? –
W rzeczywistości nie tworzy liczby całkowitej, ale podwójnej. – gatopeich
Myślę, że istnieje sprzeczność (tj. Błąd) między wierszami 2 i 3 powyżej, nie? – Ronnie