Ich versuche, einen String-Wert mit Math.round so zu runden:
String numberString = "61867345124";
int value = Math.round(Float.parseFloat(numberString));
aber ich bekomme Wert = 2147483647, was ist hier los?
Lösung des Problems
Eigentlich hast du hier zwei Probleme,
Erstens ist die Ausgabe 2147483647, da dies der maximale Wert ist, den eine ganze Zahl in Java speichern kann. Und Ihre Zahl ist größer als das. Sie können den maximalen Wert für einen primitiven Typ bestätigen, indem Sie MAX_VALUE für seine Wrapper-Klasse aufrufen, wie unten,
System.out.println(Integer.MAX_VALUE);
Wenn der Rückgabewert von Math.round größer als Integer.MAX_VALUE ist, wird eine Ganzzahl mit dem maximalen Wert zurückgegeben, den sie speichern kann.
Aus der Dokumentation hier,
Wenn das Argument positiv unendlich oder ein beliebiger Wert größer oder gleich dem Wert von Integer.MAX_VALUE ist, ist das Ergebnis gleich dem Wert von Integer.MAX_VALUE.
Um dies zu beheben, können Sie das Ergebnis in einer langen typisierten Variablen speichern.
Zweitens erhalten Sie immer noch nicht die gewünschten Ergebnisse, da Math.round, wenn es mit einer Float-Eingabe versehen ist, eine ganze Zahl zurückgibt. Sie müssen stattdessen einen long zurückgeben, der zurückgegeben wird, wenn Sie einen doppelten Wert angeben.
Hier sind die Definitionen aus der Dokumentation der Math-Klasse.
static int round(float a)
static long round(double a)
Zusammenfassend müssen Sie sowohl die Ausgabe als long speichern als auch den String-Wert als double analysieren, wie unten,
String numberString = "61867345124";
long value = Math.round(Double.parseDouble(numberString));
System.out.println(value);
Keine Kommentare:
Kommentar veröffentlichen