2009-09-20 12 views

Antwort

48

0.01 ist keine Ganzzahl (ganze Zahl), Sie können sie also natürlich nicht als eins analysieren. Verwenden Sie stattdessen Double.parseDouble oder Float.parseFloat.

65
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 (= im Grunde Brüche) enthält. Also, versuchen, 0.3 zu einem int zu analysieren, ist Unsinn. Ein double oder ein float Datentyp kann rationale Zahlen enthalten.

Die Art und Weise Java wirft einen double auf ein intdurch Entfernen des Teils nach dem Dezimalzeichen durch Runden gegen Null erfolgt.

int i = (int) 0.9999; 

i wird durch Null.

+2

Ihre Besetzung wird die unvollständige Information vollständig verlieren. Ich bin mir nicht sicher, ob das eine gute Idee ist. – Joren

+1

Ok! Vielleicht muss ich so etwas tun. Double d = Double.parseDouble (s); Recht? –

+1

@ Joren: Ich weiß, aber er will ein Integer (wenn ich seinen Code überprüfen) –

2

Verwenden Sie Double.parseDouble(String a), was Sie suchen, ist keine Ganzzahl, da es keine ganze Zahl ist.

18

Verwendung,

String s="0.01"; 
int i= new Double(s).intValue(); 
11
String s="0.01"; 
int i = Double.valueOf(s).intValue(); 
2

Verwendung dieses

int number = (int) Double.parseDouble(s);

7

Diese Art der Umwandlung ist eigentlich überraschend unintuitive in Java

Nehmen Sie zum Beispiel eine folgende Zeichenfolge: " 100,00 "

C: eine einfache Standard-Library-Funktion zumindest seit 1971 (Where did the name `atoi` come from?)

int i = atoi(decimalstring); 

Java: Pflichtdurchgang von Double (oder Float) analysiert, von einer Besetzung gefolgt

int i = (int)Double.parseDouble(decimalstring); 

Java hat sicher einige Kuriositäten, bis es Hülse ist

+0

C Ignorieren Sie einfach den Rest der Zeichenkette und parsen Sie alles, was es analysieren kann (in diesem Fall ist es "100").Es gibt keine Möglichkeit für Sie zu wissen, ob 'atoi 'tatsächlich alles in der Zeichenkette analysiert oder nicht, ob die Zeichenkette eine Zahl enthält oder ob die Zahl den Typ übersteigt. 'strtol' ist eine bessere Alternative, wenn alle oben genannten Dinge erkannt werden können. Java ist strenger, aber es stellt sicher, dass all diese Fälle abgedeckt sind. – nhahtdh

+0

Ich stimme Raywell zu, weil das 'Double.valueOf (" 16543 ") ist. IntValue();' Java will also ein PITA sein, wenn man schnell in int konvertieren will, aber Double ist viel allgemeiner. –

2

Verwenden von BigDecimal, um zu runden:

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(); 
Verwandte Themen