Der Java-Code lautet wie folgt:
String s = "0.01";
int i = Integer.parseInt(s);
Dies löst jedoch eine NumberFormatException aus ... Was könnte schief gehen?
0,01 ist keine ganze Zahl (ganze Zahl), daher können Sie sie natürlich nicht als eine analysieren. Verwenden Sie Double.parseDouble
oder Float.parseFloat
stattdessen.
String s = "0.01";
double d = Double.parseDouble(s);
int i = (int) d;
Der Grund für die Ausnahme ist, dass eine Ganzzahl keine rationalen Zahlen enthält (= im Grunde Brüche). Der Versuch 0.3
, einen Int zu analysieren , ist also Unsinn. Ein double
oder ein float
Datentyp kann rationale Zahlen enthalten.
Die Art und Weise, wie Java a in a umwandelt double
, int
erfolgt durch Entfernen des Teils nach dem Dezimaltrennzeichen durch Runden auf Null .
int i = (int) 0.9999;
i
wird Null sein.
Verwenden,
String s="0.01"; int i= new Double(s).intValue();
quelle
String s="0.01"; int i = Double.valueOf(s).intValue();
quelle
Diese Art der Konvertierung ist in Java überraschend wenig intuitiv
Nehmen Sie zum Beispiel eine folgende Zeichenfolge: "100.00"
C: eine einfache Standardbibliotheksfunktion mindestens seit 1971 ( Woher kommt der Name "atoi"? )
int i = atoi(decimalstring);
Java: obligatorische Passage durch Double (oder Float) Parse, gefolgt von einer Besetzung
int i = (int)Double.parseDouble(decimalstring);
Java hat sicher einige Kuriositäten im Ärmel
quelle
100
). Sie können nicht feststellen, obatoi
tatsächlich alles in der Zeichenfolge analysiert wurde oder nicht, ob die Zeichenfolge eine Zahl enthält oder ob die Zahl den Typ überschreitet.strtol
ist eine bessere Alternative, bei der alle oben genannten Dinge erkannt werden können. Java ist strenger, stellt jedoch sicher, dass alle diese Fälle abgedeckt sind.Double.valueOf("16543").intValue();
Java möchte also eine PITA sein, wenn Sie schnell in int konvertieren möchten, aber Double ist viel allgemeiner.Verwenden von BigDecimal zum Abrunden:
String s1="0.01"; int i1 = new BigDecimal(s1).setScale(0, RoundingMode.HALF_UP).intValueExact(); String s2="0.5"; int i2 = new BigDecimal(s2).setScale(0, RoundingMode.HALF_UP).intValueExact();
quelle
Auf diese Weise erhalten Sie die Antwort auf den Wert, den Sie erhalten möchten.
quelle
verwende das hier
int number = (int) Double.parseDouble(s);
quelle
Verwenden
Double.parseDouble(String a)
Sie, wonach Sie suchen, keine Ganzzahl, da es sich nicht um eine ganze Zahl handelt.quelle
Eine weitere Lösung ist möglich.
int number = Integer.parseInt(new DecimalFormat("#").format(decimalNumber))
Beispiel:
Integer.parseInt(new DecimalFormat("#").format(Double.parseDouble("010.021")))
Ausgabe
10
quelle