Wie kann ich "30.0" oder "30.00" zu Integer analysieren?

7

Ich benutze:

%Vor%

gibt eine Ausnahme zurück:

Ausnahme im Thread "main" java.lang.NumberFormatException: Für Eingabezeichenfolge: "300.0"

Wie kann ich diese Zeichenfolge zu int analysieren?

danke für Hilfe:)

    
Koerr 01.02.2011, 09:28
quelle

5 Antworten

12

So machen Sie es:

%Vor%

( ideone.com-Demo )

Der Grund, warum Sie eine NumberFormatException erhalten haben, ist einfach, dass die Zeichenfolge ("300.00", die eine Fließkommazahl ist) nicht als ganze Zahl analysiert werden konnte.

Es ist vielleicht erwähnenswert, dass diese Lösung 300 sogar für die Eingabe "300.99" ausgibt. Um eine ordnungsgemäße Rundung zu erhalten, können Sie

verwenden %Vor%     
aioobe 01.02.2011, 09:34
quelle
3

Ich bin erstaunt, dass niemand BigDecimal erwähnt hat.

Es ist wirklich der beste Weg, die Zeichenfolge von Dezimalzahlen in int zu konvertieren.
Josuha Bloch schlägt vor, diese Methode in einem seiner Puzzler zu verwenden.

Hier ist das Beispiel, das auf Ideone.com

ausgeführt wird %Vor%     
Shervin Asgari 01.02.2011 09:46
quelle
2

Sie sollten es zuerst nach double analysieren und dann nach int :

umwandeln %Vor%

Sie müssen jedoch NumberFormatException s abfangen.

Edit: Danke an Joachim Sauer für die Korrektur.

    
trojanfoe 01.02.2011 09:30
quelle
2

Sie können das Double.parseDouble () verwenden Methode, um es zuerst in double zu transformieren und anschließend double auf int zu setzen, indem Sie (int) davor setzen. Sie erhalten dann den folgenden Code:

%Vor%     
Sören 01.02.2011 09:33
quelle
1

Integer.parseInt() hat einen String zu nehmen, der eine Ganzzahl ist (dh keine Dezimalstellen, auch wenn die Zahl einer Ganzzahl entspricht. Die Ausnahme, die Sie dort bekommen, ist im Wesentlichen "Sie" Ich habe mir gesagt, dass diese Zahl eine ganze Zahl ist, aber diese Zeichenfolge hat kein gültiges Format für eine Ganzzahl! "

Wenn die Zahl eine dezimale Komponente enthält, müssen Sie Double.parseDouble() verwenden, wodurch ein doppeltes Primitiv zurückgegeben wird. Da Sie sich jedoch nicht für die Dezimalkomponente interessieren, können Sie sie einfach löschen, indem Sie das Double einfach in einen int-String umwandeln:

%Vor%

Beachten Sie jedoch, dass dadurch nur die dezimale Komponente gelöscht wird, die Zahl wird nicht um die Zahl gerundet. Wenn Sie also 1.2, 1.8 oder 1.999999 an einen int übergeben, erhalten Sie 1. Wenn Sie die zurückkommende Zahl runden möchten, verwenden Sie Math.round () statt nur auf einen int zu werfen.

    
berry120 01.02.2011 09:37
quelle

Tags und Links