W Javie chcę zamienić podwójną na liczbę całkowitą, wiem, czy zrobisz to:
double x = 1.5;
int y = (int)x;
otrzymujesz y = 1. Jeśli to zrobisz:
int y = (int)Math.round(x);
Prawdopodobnie dostaniesz 2. Jednak zastanawiam się: ponieważ podwójne reprezentacje liczb całkowitych wyglądają czasami jak 1,9999999998 lub coś podobnego, czy istnieje możliwość, że rzutowanie liczby podwójnej utworzonej za pomocą Math.round () nadal spowoduje skrócenie liczby w dół, a raczej niż zaokrąglona liczba, której szukamy (tj .: 1 zamiast 2 w przedstawionym kodzie)?
(i tak, mam na myśli to jako takie: czy jest jakaś wartość dla x, gdzie y pokaże wynik, który jest obciętą, a nie zaokrągloną reprezentacją x?)
Jeśli tak: czy istnieje lepszy sposób na zrobienie podwójnej liczby w zaokrągloną liczbę całkowitą bez ryzyka obcięcia?
Coś wymyśliłem: Math.round (x) zwraca long, a nie double. Stąd: Math.round () nie może zwrócić liczby wyglądającej jak 3.9999998. Dlatego int (Math.round ()) nigdy nie będzie musiało niczego obcinać i zawsze będzie działać.
Odpowiedzi:
Nie,
round()
zawsze zaokrągli podwójną wartość do prawidłowej wartości, a następnie zostanie rzutowana na wartość,long
która obetnie wszelkie miejsca dziesiętne. Ale po zaokrągleniu nie pozostaną żadne części ułamkowe.Oto dokumenty z
Math.round(double)
:źródło
[max double: 1.7976931348623157E308]
do int, która jest znacznie mniejsza[max int: 2147483647]
. Tylko coś do zapamiętania.W przypadku typu danych
Double
doint
można użyć:źródło
Rozwiązałem mój cel.
źródło