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?
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?
Antworten:
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.
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
100
). Sie können nicht feststellen, ob atoi
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.
Angenommen, wir nehmen eine Ganzzahl in Zeichenfolge.
String s = "100"; int i = Integer.parseInt (s); oder int i = Integer.valueOf (s);
In Ihrer Frage ist die Nummer, die Sie versuchen, die Änderung vorzunehmen, die ganze Nummer
String s = "10.00";
double d = Double.parseDouble (s);
int i = (int) d;
Auf diese Weise erhalten Sie die Antwort auf den Wert, den Sie erhalten möchten.