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
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% 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:
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:
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.
Tags und Links java