Het omzetten verdubbelen tot integer in Java

In Java, wil ik een dubbele converteren naar een integer, ik weet dat als je dit doet:

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

je krijgt y = 1. Als je dit doet:

int y = (int)Math.round(x);

U zult waarschijnlijk krijgt 2. Maar ik vraag me af: sinds dubbele representaties van integers soms eruit 1,9999999998 of iets dergelijks, is er een mogelijkheid dat het gieten van een dubbele gemaakt via Math.round () zal nog steeds resulteren in een afgeknotte naar beneden nummer, in plaats van het ronde getal we zijn op zoek naar? (dat wil zeggen: 1 in plaats van 2 in de code, zoals weergegeven)

(en ja, ik bedoel het als zodanig: Is er geen waarde voor x, waarbij y een resultaat dat is eerder een afgekapt dan een afgeronde voorstelling van x zal tonen?)

Als dat zo is:? Is er een betere manier om een ​​dubbele in een afgeronde int zonder het risico te lopen afkappen


Figured iets: Math.round (x) geeft een lang, niet een double. Vandaar: het is onmogelijk voor Math.round () om een ​​aantal op zoek als 3,9999998 terug te keren. Daarom int (Math.round ()) zal nooit moeten afkappen van alles en zal altijd werken.


Antwoord 1, Autoriteit 100%

is er een mogelijkheid dat het gieten dubbele gemaakt via Math.round()nog steeds resulteren in een afgeknot beneden getal

Nee, round()zal altijd rond je dubbel op de juiste waarde, en dan zal het zijn cast om een ​​longdie alle cijfers achter de komma zal afkappen. Maar na afronding, zal er geen sprake zijn van breukdelen overgebleven.

Hier zijn de documenten van Math.round(double):

Retourneert het dichtst in de buurt van het argument. Het resultaat is afgerond op een geheel getal door 1/2 toe te voegen, de vloer van het resultaat te nemen en het resultaat te werpen om lang te typen. Met andere woorden, het resultaat is gelijk aan de waarde van de uitdrukking:

(long)Math.floor(a + 0.5d)

Antwoord 2, Autoriteit 29%

Voor het DATATYPE Doublenaar int, u kunt het volgende gebruiken:

Double double = 5.00;
int integer = double.intValue();

Antwoord 3, Autoriteit 15%

Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);

heeft mijn doel opgelost.

Other episodes