Ich muss in Java ein Double in ein Int umwandeln, aber der numerische Wert muss immer abgerundet werden. dh 99,99999999 -> 99
Ich muss in Java ein Double in ein Int umwandeln, aber der numerische Wert muss immer abgerundet werden. dh 99,99999999 -> 99
Antworten:
Beim Umwandeln in ein int wird implizit jede Dezimalstelle gelöscht. Sie müssen Math.floor () nicht aufrufen (unter der Annahme positiver Zahlen).
Einfach mit (int) typisieren, zB:
System.out.println((int)(99.9999)); // Prints 99
Davon Math.floor
abgesehen hat es ein anderes Verhalten als das Runden in Richtung negative Unendlichkeit (@Chris Wong)
Math.floor
sich ein anderes Ergebnis für negative Zahlen als eine einfache Typumwandlung erzeugen.
System.out.println((long)(9.9999e300));
BigDecimal
und RoundingMode
Klassen Anwendungen ROUND_DOWN
für Rund zu-Null und ROUND_FLOOR
für Rund towards- negative Unendlichkeit.
Um ein Double in ein Int umzuwandeln und es auf die nächste Ganzzahl runden zu lassen (dh im Gegensatz zu dem typischen (int)(1.8)
und (int)(1.2)
, das beide in Richtung 0 " abrundet " und zurückkehrt 1
), addieren double
Sie einfach 0,5 zu dem Wert, den Sie in eine eingebenint
.
Zum Beispiel, wenn wir haben
double a = 1.2;
double b = 1.8;
Dann die folgenden Typumwandlungsausdrücke für x und y und geben die abgerundeten Werte ( x = 1
und y = 1
) zurück:
int x = (int)(a); // This equals (int)(1.2) --> 1
int y = (int)(b); // This equals (int)(1.8) --> 1
Durch Addition von jeweils 0,5 erhalten wir jedoch das auf die nächste ganze Zahl gerundete Ergebnis , das wir in einigen Fällen ( x = 1
und y = 2
) wünschen können :
int x = (int)(a + 0.5); // This equals (int)(1.8) --> 1
int y = (int)(b + 0.5); // This equals (int)(2.3) --> 2
Als kleine Anmerkung können Sie mit dieser Methode auch den Schwellenwert steuern, bei dem das double
beim (int)
Typecasting auf- oder abgerundet wird .
(int)(a + 0.8);
zu typisieren. Dies wird nur (int)a + 1
dann aufgerundet , wenn die Dezimalwerte größer oder gleich 0,2 sind. Das heißt, durch Hinzufügen von 0,8 zu double
unmittelbar vor der Typisierung werden 10.15 und 10.03 beim (int)
Typisieren auf 10 abgerundet , aber 10.23 und 10.7 werden auf 11 aufgerundet.
System.out.println(""+ (int)(-0.8d + 0.5))
wie erwartet 0 statt -1 aus
Math.floor(n)
wobei n ein Doppel ist. Dies wird anscheinend tatsächlich ein Double zurückgeben. Stellen Sie also sicher, dass Sie es nachher typisieren.
Das funktioniert gut int i = (int) dbl;
versuchen Sie es damit, das ist einfach
double x= 20.22889909008;
int a = (int) x;
this will return a=20
oder versuchen Sie es damit: -
Double x = 20.22889909008;
Integer a = x.intValue();
this will return a=20
oder versuchen Sie es damit: -
double x= 20.22889909008;
System.out.println("===="+(int)x);
this will return ===20
Möglicherweise hilft Ihnen dieser Code.
In dieser Frage:
1.Casting Double to Integer ist eine sehr einfache Aufgabe.
2.Aber es wird kein doppelter Wert auf die nächste Dezimalstelle gerundet. Daher kann das Casting folgendermaßen durchgeführt werden:
double d=99.99999999;
int i=(int)d;
System.out.println(i);
und es wird gedruckt 99
, aber es wurde nicht gerundet.
So können wir zum Runden verwenden,
double d=99.99999999;
System.out.println( Math.round(d));
Dadurch wird die Ausgabe von gedruckt 100
.