Hoe je float naar int converteert met Java

Ik heb de volgende regel gebruikt om float naar int te converteren, maar het is niet zo nauwkeurig als ik zou willen:

float a=8.61f;
 int b;
 b=(int)a;

Het resultaat is: 8(Het moet 9zijn)

Als a = -7.65f, is het resultaat: -7(Het moet -8zijn)

Wat is de beste manier om dit te doen?


Antwoord 1, autoriteit 100%

Als u Math.round()gebruikt, wordt de float afgerond op het dichtstbijzijnde gehele getal.


Antwoord 2, autoriteit 26%

Eigenlijk zijn er verschillende manieren om float naar int te downcasten, afhankelijk van het resultaat dat je wilt bereiken:
(voor int i, float f)

  • round (het dichtstbijzijnde gehele getal bij gegeven float)

    i = Math.round(f);
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  2 ; f =  2.68 -> i =  3
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -3
    

    opmerking: dit is contractueel gelijk aan (int) Math.floor(f + 0.5f)

  • afkappen (d.w.z. alles achter de komma laten vallen)

    i = (int) f;
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  2 ; f =  2.68 -> i =  2
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
    
  • ceil/floor (een geheel getal altijd groter/kleiner dan een gegeven waarde alshet een fractioneel deel heeft)

    i = (int) Math.ceil(f);
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  3 ; f =  2.68 -> i =  3
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
    i = (int) Math.floor(f);
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  2 ; f =  2.68 -> i =  2
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -3 ; f = -2.68 -> i = -3
    

Voor het afronden van positievewaarden kunt u ook gewoon (int)(f + 0.5)gebruiken, wat precies werkt als Math.Roundin die gevallen (volgens document).

Je kunt ook Math.rint(f)gebruiken om de te doen afronden op het dichtstbijzijnde even gehele getal; het is aantoonbaar handig als je verwacht veel floats te behandelen met een fractioneel deel dat strikt gelijk is aan .5 (let op de mogelijke IEEE-afrondingsproblemen), en het gemiddelde van de set op zijn plaats wilt houden; je introduceert echter een andere bias, waarbij even getallen vaker voorkomen dan oneven.

Zie

http://mindprod.com/jgloss/round.html

http://docs.oracle.com/ javase/6/docs/api/java/lang/Math.html

voor meer informatie en enkele voorbeelden.


Antwoord 3, autoriteit 2%

Math.round(value)rond de waarde af op het dichtstbijzijnde gehele getal.

Gebruik

1) b=(int)(Math.round(a));
2) a=Math.round(a);  
   b=(int)a;

Antwoord 4

Math.round retourneert ook een geheel getal, dus u hoeft niet te typen.

int b = Math.round(float a);

Antwoord 5

Gebruik Math.round(value)en cast het na het typen naar integer.

float a = 8.61f;
int b = (int)Math.round(a);

Antwoord 6

Maak een Float-object door een Float-primitief door te geven aan de constructor en gebruik vervolgens het Float-object dat u hebt gemaakt om een intprimitief.

Uitleg
Aangezien nummerwrapperklassen de klasse java.lang.Numberuitbreiden, kunt u elk nummerwrapperobjectelk ander primitief nummer-type laten retourneren door de methode .<type>Value()te gebruiken.

Antwoord 7

Als u een float-waarde naar een geheel getal wilt converteren, kunt u dit op verschillende manieren doen, afhankelijk van hoe u de float-waarde wilt afronden.

Eerste manier is om de float-waarde af te ronden:

float myFloat = 3.14f;
int myInteger = (int)myFloat;

De uitvoer van deze code is 3, zelfs als de myFloat-waarde dichter bij 4 ligt.

De tweede manier is om de float-waarde af te ronden:

float myFloat = 3.14f;
int myInteger = Math.ceil(myFloat);

De uitvoer van deze code is 4, omdat de afrondingsmodus altijd naar de hoogste waarde zoekt.


Antwoord 8

Math.round() is voldoende

int b = Math.round(a)

Dit zal het werk doen


Antwoord 9

Wat mij betreft, makkelijker: (int) (a +.5)// a is een Float. Afgeronde waarde retourneren.

Niet afhankelijk van Java Math.round()-types

Other episodes