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 9
zijn)
Als a = -7.65f
, is het resultaat: -7
(Het moet -8
zijn)
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.Round
in 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 int
primitief.
Uitleg |
---|
Aangezien nummerwrapperklassen de klasse java.lang.Number uitbreiden, 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