Ik heb twee gehele getallen x
en y
. Ik moet x/y
berekenen en als uitkomst zou ik graag zweven. Bijvoorbeeld als een uitkomst van 3/2
zou ik 1,5 hebben. Ik dacht dat het gemakkelijkst (of de enige) manier om het te doen is om x
en y
in floatstype te converteren. Helaas kan ik geen gemakkelijke manier vinden om het te doen. Zou je me daar kunnen helpen?
Antwoord 1, Autoriteit 100%
U hoeft alleen te casten ten minste één van de operanden tot een vlotter:
float z = (float) x / y;
of
float z = x / (float) y;
of (onnodig)
float z = (float) x / (float) y;
Antwoord 2, Autoriteit 4%
U moet drijver niet gebruiken tenzij u moet. In 99% van de gevallen is dubbel een betere keuze.
int x = 1111111111;
int y = 10000;
float f = (float) x / y;
double d = (double) x / y;
System.out.println("f= "+f);
System.out.println("d= "+d);
PRINTS
f= 111111.12
d= 111111.1111
Volgend @ Matt’s commentaar.
FLOVER heeft zeer weinig precisie (6-7 cijfers) en toont een aanzienlijke afrondingsfout vrij eenvoudig. Dubbel heeft nog eens 9 cijfers nauwkeurigheid. De kosten van het gebruik van dubbele in plaats van float is fictief in 99% van de gevallen, maar de kosten van een subtiele bug als gevolg van afrondingsfout is veel hoger. Om deze reden raden veel ontwikkelaars aan om helemaal geen drijvend punt te gebruiken en sterk bigdecimal aan te bevelen.
Ik vind echter dat dubbel in de meeste gevallen kan worden gebruikt mits verstandige afronding wordt gebruikt.
In dit geval heeft int x 32-bits precisie, terwijl float een 24-bits precisie heeft. Zelfs delen door 1 kan een afrondingsfout hebben. double daarentegen heeft een nauwkeurigheid van 53 bits, wat meer dan genoeg is om een redelijk nauwkeurig resultaat te krijgen.
Antwoord 3, autoriteit 4%
Je hoeft alleen maar de eerste waarde over te dragen naar float, voordat deze betrokken raakt bij verdere berekeningen:
float z = x * 1.0 / y;
Antwoord 4, autoriteit 2%
// Het gehele getal dat ik wil converteren
int myInt = 100;
// Casting van integer naar float
float newFloat = (float) myInt
Antwoord 5, autoriteit 2%
Hier is hoe u het kunt doen:
public static void main(String[] args) {
// TODO Auto-generated method stub
int x = 3;
int y = 2;
Float fX = new Float(x);
float res = fX.floatValue()/y;
System.out.println("res = "+res);
}
Tot ziens!
Antwoord 6
Sameer:
float l = new Float(x/y)
werkt niet, omdat het eerst de gehele deling van x en y berekent en er vervolgens een float van construeert.
float result = (float) x / (float) y;
Is semantisch de beste kandidaat.