Wie kann ich in Java eine Ganzzahl in Float konvertieren?


81

Ich habe zwei ganze Zahlen xund y. Ich muss rechnen x/yund als Ergebnis möchte ich schweben. Zum Beispiel 3/2möchte ich als Ergebnis von 1.5 haben. Ich dachte , dass einfachste (oder einzige) Weg , es zu tun zu konvertieren xund yin float - Typen. Leider kann ich keinen einfachen Weg finden, dies zu tun. Könnten Sie mir bitte dabei helfen?


7
float result = ((float) x) / y?
Mibollma

Überprüfen Sie dies heraus: xahlee.org/java-a-day/casting.html
fasseg


1
@ VinAy: Ich würde das in diesem Fall nicht empfehlen. BigDecimalist kein allgemein korrekter Ersatz für float.
Matt Ball

1
@ VinAy: Es kommt ganz darauf an, was der Zweck ist. Wenn er finanziert, sind Sie richtig. Wenn er Asteroiden-Trajektorien berechnet, sind Sie es nicht.
Marquis von Lorne

Antworten:


151

Sie gerade benötigen Guss mindestens einer der Operanden mit einem Schwimmer:

float z = (float) x / y;

oder

float z = x / (float) y;

oder (unnötig)

float z = (float) x / (float) y;

Ist dies effizienter als: float z = (1,0 * x) / y; ? Ist die Float-Konvertierung intern effizienter als die Multiplikation? Tnx!
MSquare

1
Ich weiß es nicht, aber ich denke, es ist zu 99% oder mehr irrelevant. Es wird nicht einmal aus der Ferne ein Engpass sein. Wenn Sie wirklich so besorgt sind, messen Sie es selbst.
Matt Ball

1
Die erste und die zweite verursachen Fehler bei bestimmten Armgeräten. Stellen Sie sicher, dass Sie beide Ganzzahlen umwandeln.
Oliver Dixon

java.lang.Integer kann nicht in java.lang.Float
asp

2
@ user3002853 Lesen Sie mehr über Boxed-Typen und Primitive. docs.oracle.com/javase/tutorial/java/data/autoboxing.html
Matt Ball

5

Sie sollten float nicht verwenden, es sei denn, Sie müssen. In 99% der Fälle ist Double die bessere Wahl.

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);

druckt

f= 111111.12
d= 111111.1111

Nach dem Kommentar von @ Matt.

float hat eine sehr geringe Genauigkeit (6-7 Stellen) und zeigt ziemlich leicht einen signifikanten Rundungsfehler. double hat weitere 9 Stellen Genauigkeit. Die Kosten für die Verwendung von double anstelle von float sind in 99% der Fälle fiktiv, jedoch sind die Kosten für einen subtilen Fehler aufgrund eines Rundungsfehlers viel höher. Aus diesem Grund empfehlen viele Entwickler, überhaupt kein Gleitkomma zu verwenden, und empfehlen BigDecimal nachdrücklich.

Ich finde jedoch, dass Double in den meisten Fällen verwendet werden kann, vorausgesetzt, es wird eine sinnvolle Rundung verwendet .

In diesem Fall hat int x eine Genauigkeit von 32 Bit, während float eine Genauigkeit von 24 Bit hat. Selbst das Teilen durch 1 kann einen Rundungsfehler verursachen. double hingegen hat eine Genauigkeit von 53 Bit, was mehr als genug ist, um ein einigermaßen genaues Ergebnis zu erzielen.


6
Sie sollten näher erläutern, warum double es besser ist als float.
Matt Ball

5

Sie müssen nur den ersten Wert in float übertragen, bevor er in weitere Berechnungen einbezogen wird:

float z = x * 1.0 / y;

4

// Die Ganzzahl, die ich konvertieren möchte

int myInt = 100;

// Umwandlung der Ganzzahl in Float

float newFloat = (float) myInt

1
Zumindest in Android Studio beschwert sich der Compiler über inkompatible Typen, die dies versuchen.
Adam R. Turner

3

So können Sie es machen:

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);
}

Wir sehen uns !


7
Die Verwendung eines Wrapper-Typs ( Float) ist hierfür völlig unnötig.
Matt Ball

1
Bitte verwenden Sie keine Signaturen oder Slogans in Ihren Posts.
Meagar

1

Sameer:

float l = new Float(x/y)

funktioniert nicht, da zuerst die ganzzahlige Division von x und y berechnet und dann ein Float daraus erstellt wird.

float result = (float) x / (float) y;

Ist semantisch der beste Kandidat.


Ihre Antwort sollte ein Kommentar gewesen sein. Sameer erhält keine Benachrichtigung über Ihren Beitrag. Semantisch gesehen ist es unnötig, beide Ints in Float umzuwandeln, bevor das Ergebnis berechnet wird - daher ist es nicht besser, als nur einen zu transformieren. Es macht einen falschen Eindruck und ist daher minderwertig, imho.
Benutzer unbekannt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.