konwersja liczby podwójnej na liczbę całkowitą w Javie

W Javie, chcę przekonwertować double na liczbę całkowitą, wiem, jeśli to zrobisz:

double x = 1.5;
int y = (int)x;

Otrzymujesz y=1. Jeśli to zrobisz:

int y = (int)Math.round(x);
Prawdopodobnie dostaniesz 2. Zastanawiam się jednak: skoro podwójne reprezentacje liczb całkowitych czasami wyglądają jak 1.99999999998 czy coś takiego, to czy istnieje możliwość, że podwójne reprezentacje utworzone za pomocą matematyki.round() nadal będzie skutkować obciętą liczbą w dół, a nie zaokrągloną liczbą, której szukamy (np.: 1 zamiast 2 w kodzie jako reprezentowany) ?

(i tak, mam na myśli to jako takie: czy istnieje 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, aby podwójne do zaokrąglonej int bez ryzyka obcięcia?


Coś wymyśliłem: Matematyka.round (x) zwraca długi, a nie podwójny. Stąd: to niemożliwe dla matematyki.round() Zwraca liczbę wyglądającą jak 3.9999998. Dlatego int (Math.okrągłe()) nigdy nie będą potrzebne obcinać wszystko i zawsze będzie działać.

Author: Eric Leschinski, 2011-06-24

4 answers

Czy istnieje możliwość, że rzucenie podwójnego stworzonego przez Math.round() będzie nadal skutkować obciętą liczbą

Nie, round() zawsze będzie zaokrąglać Twoje podwójne do prawidłowej wartości, a następnie zostanie rzucone do long, które obetną dowolne miejsca po przecinku. Ale po zaokrągleniu nie będzie żadnych części ułamkowych.

Oto dokumenty z Math.round(double):

Zwraca najbliższą długość argumentu. Wynik jest zaokrąglony do liczba całkowita przez dodanie 1/2, wzięcie podłogi wyniku i rzucenie wyniku do typu long. Innymi słowy, wynik jest równy wartości wyrażenia:

(long)Math.floor(a + 0.5d)
 85
Author: jjnguy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-24 14:01:46

Dla typu danych Double do int, możesz użyć następującego:

Double double = 5.00;

int integer = double.intValue();
 18
Author: Charlie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-03 10:23:20
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);
Rozwiązałem mój cel.
 6
Author: Nandkishor Gokhe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-31 00:53:47
double a = 1.450;

String sa = String.valueOf(a);
int lengthUntilPoint = sa.indexOf(".")+1;
int power = sa.length() - lengthUntilPoint;
int ia = (int) (a* Math.pow(10, power));
 -9
Author: gökhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-22 17:02:06