omzetten van dubbel naar geheel getal in java

In Java, wil ik een dubbel omzetten naar een geheel getal, ik weet of je dit doet:

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

je y=1 krijgt. Als je dit doet:

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

Je'zult waarschijnlijk 2 krijgen. Ik vraag me echter af: aangezien dubbele representaties van gehele getallen er soms uitzien als 1,9999999998 of zoiets, is er een mogelijkheid dat het casten van een dubbel gemaakt via Math.round() nog steeds zal resulteren in een afgekapt getal naar beneden, in plaats van het afgeronde getal dat we zoeken (d.w.z.: 1 in plaats van 2 in de code zoals weergegeven) ?

(en ja, ik bedoel het ook zo: Is er elke waarde voor x, waarbij y een resultaat zal tonen dat een afgeknotte in plaats van een afgeronde weergave van x is)?

Zo ja: is er een betere manier om van een dubbel een afgeronde int te maken zonder het risico van truncatie te lopen?


Ik heb iets bedacht: Math.round(x) geeft een lang getal terug, geen dubbel getal. Dus: het is onmogelijk voor Math.round() om een getal terug te geven dat lijkt op 3.9999998. Daarom zal int(Math.round()) nooit iets moeten afkappen en zal het altijd werken.

Oplossing

is er een mogelijkheid dat het casten van een dubbel gemaakt via Math.round() nog steeds zal resulteren in een afgekapt getal naar beneden

Nee, round() rondt het getal altijd af naar de juiste waarde, en giet het dan naar een long die de decimalen afkapt. Maar na het afronden blijven er geen fractionele delen over.

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

Geeft het langste getal terug dat het dichtst bij het argument ligt. Het resultaat wordt afgerond tot een geheel getal door 1/2 op te tellen, de grond van het resultaat te nemen, en het resultaat te casten naar het type lang. Met andere woorden, het resultaat is gelijk aan de waarde van de uitdrukking:

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

Commentaren (3)

Voor het datatype Double naar int, kun je het volgende gebruiken:

Double double = 5.00;

int integer = double.intValue();
Commentaren (2)
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);

Mijn doel opgelost.

Commentaren (0)