Mam dwie liczby całkowite x
i y
. Muszę obliczyć x/y
i jako wynik chciałbym uzyskać float. Na przykład jako wynik 3/2
chciałbym mieć 1.5. Myślałem, że najłatwiej (lub jedynym) sposobem na to jest konwersja x
i y
do typu float. Niestety nie mogę znaleźć na to prostego sposobu. Czy mógłbyś mi w tym pomóc?
java
integer
floating-point
rzymski
źródło
źródło
BigDecimal
nie jest uniwersalnym zamiennikiemfloat
.Odpowiedzi:
Wystarczy rzucić co najmniej jeden z operandów na zmiennoprzecinkowy:
float z = (float) x / y;
lub
float z = x / (float) y;
lub (niepotrzebne)
float z = (float) x / (float) y;
źródło
Nie powinieneś używać float, chyba że musisz. W 99% przypadków lepszym wyborem jest podwójne.
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);
wydruki
f= 111111.12 d= 111111.1111
Po komentarzu @ Matta.
float ma bardzo małą dokładność (6-7 cyfr) i dość łatwo pokazuje znaczący błąd zaokrąglenia. double ma kolejne 9 cyfr dokładności. Koszt użycia double zamiast float jest hipotetyczny w 99% przypadków, jednak koszt subtelnego błędu spowodowanego błędem zaokrąglania jest znacznie wyższy. Z tego powodu wielu programistów w ogóle nie zaleca używania zmiennoprzecinkowych i zdecydowanie zaleca BigDecimal.
Jednak uważam, że w większości przypadków można użyć podwójnego, pod warunkiem że zastosowane zostanie rozsądne zaokrąglenie .
W tym przypadku int x ma 32-bitową precyzję, podczas gdy float ma 24-bitową precyzję, nawet dzielenie przez 1 może spowodować błąd zaokrąglenia. double z drugiej strony ma 53-bitową precyzję, która jest więcej niż wystarczająca, aby uzyskać dość dokładny wynik.
źródło
double
jest lepsze niżfloat
.Musisz tylko przenieść pierwszą wartość do float, zanim zostanie zaangażowana w dalsze obliczenia:
float z = x * 1.0 / y;
źródło
// Liczba całkowita, którą chcę przekonwertować
int myInt = 100;
// Rzutowanie liczby całkowitej na zmiennoprzecinkową
float newFloat = (float) myInt
źródło
Oto jak możesz to zrobić:
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); }
Do zobaczenia !
źródło
Float
) jest do tego całkowicie niepotrzebne.Sameer:
float l = new Float(x/y)
nie zadziała, ponieważ najpierw obliczy dzielenie całkowite x i y, a następnie utworzy z tego liczbę zmiennoprzecinkową.
float result = (float) x / (float) y;
Jest semantycznie najlepszym kandydatem.
źródło