konvertering af dobbelt til heltal i java

I Java vil jeg konvertere en double til et heltal, jeg ved, om du gør det:

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

du får y=1. Hvis du gør dette:

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

Du'får sandsynligvis 2. Jeg undrer mig dog: Da dobbelt repræsentationer af heltal nogle gange ser ud som 1.99999999999998 eller noget, er der så en mulighed for, at casting af en double oprettet via Math.round() stadig vil resultere i et afkortet tal nedad, i stedet for det afrundede tal vi leder efter (dvs.: 1 i stedet for 2 i koden som repræsenteret) ?

(og ja, jeg mener det som sådan: Er der nogle værdier for x, hvor y vil vise et resultat, der er en afkortet snarere end en afrundet repræsentation af x)?

Hvis ja: Er der en bedre måde at gøre en double til en afrundet int uden at risikere trunkering?


Fandt ud af noget: Math.round(x) returnerer en long, ikke en double. Derfor: Det er umuligt for Math.round() at returnere et tal der ligner 3.9999998. Derfor vil int(Math.round()) aldrig skulle afkortes noget og vil altid virke.

Løsning

er der en mulighed for, at casting af en double skabt via Math.round() stadig vil resultere i et afkortet tal nedad

Nej, round() vil altid afrunde din double til den korrekte værdi, og derefter vil den blive castet til en long, som vil afkortede alle decimaler. Men efter afrundingen vil der ikke være nogen brøkdele tilbage.

Her er dokumentationen fra Math.round(double):

Returnerer den nærmeste long til argumentet. Resultatet afrundes til et heltal ved at lægge 1/2 til, tage gulvet af resultatet og kaste resultatet til typen long. Med andre ord er resultatet lig med værdien af udtrykket:

(long)Math.floor(a + 0,5d)

Kommentarer (3)

For datatypen Double til int kan du bruge følgende:

Double double = 5.00;

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

Løste mit formål.

Kommentarer (0)