2016-04-13 14 views
0

Ich muss eine Zinsmethode auf eine Nummer in einem JLabel anwenden. Ich kann es von einem Jtextfield aus schaffen, aber aus irgendeinem Grund kann ich es nicht mit dem JLabel arbeiten.Konvertieren von Zeichenfolge in eine lesbare int von einem JLabel

Hier ist der Code, der ausgelöst wird, wenn die Jdrücken gedrückt wird:

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {           
    interest(Integer.parseInt(balanceLabel.getText())); 

balanceLabel ist der Name des Labels, mit dem ich zu arbeiten versuche.

Hier ist der Fehler, der zurückgegeben wird, wenn ich die Taste drücken:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "£1000.0" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 

ich das Problem recherchiert und es scheint es sehr häufig ist, aber aus irgendeinem Grund beantrage ich kann nicht andere Antworten auf meine Situation da mir das Wissen dafür fehlt.

+1

Sie müssen £ Zeichen vor dem Parsen der Zeichenfolge zu Integer – esprittn

+0

beseitigen Irgendwelche Idee, wie ich es loswerden kann, nur während es liest, was ist in der JLabel? –

+0

Erstaunliche Antworten. Ich schätze die Zeit und das Wissen, das Sie mir allen gegeben haben. Nachdem das gesagt wurde, entschied ich mich, "Float" anstelle von "Double" zu verwenden, wie @dambros sagte. Beide Antworten von Lasagne und Dambros sollten von anderen Benutzern mit einem ähnlichen Problem betrachtet werden, da sie sehr informativ sind. Danke noch einmal. –

Antwort

1

Das Problem ist die £ und die ., da Sie eine int Umwandlung versuchen.

Verwenden Sie einen Schwimmer statt:

Float.parseFloat(balanceLabel.getText().substring(1)); 

Auf diese Weise können Dezimalwerte haben kann, die Sinn für Währung macht.

+0

Große Antwort! Es ist jetzt alles klar. Ich kann nicht glauben, dass ich nicht an diesen DARN DECIMAL POINT dachte! Ich dachte, es wäre nur das "£", das es als Fehler anzeigen würde. Danke für deine Zeit und dein Wissen. Dies schließt alle anderen Benutzer ein, die zu dieser Antwort beigetragen haben. Danke noch einmal –

0

Nun, von dem, was ich sehen kann, versuchen Sie, £ zu konvertieren, die keine ganze Zahl ist, so dass Sie eine Ausnahme dafür erhalten. Sie haben auch einen Dezimalwert, den eine Ganzzahl nicht verarbeiten kann, weshalb die Ausnahme ebenfalls ausgelöst wird.

public static int parseInt(String s) throws NumberFormatException 

Analysiert das String-Argument als vorzeichenbehaftete ganze Dezimalzahl. Die Zeichen in der Zeichenfolge müssen alle Dezimalstellen sein, außer dass das erste Zeichen ein ASCII-Minuszeichen '-' ('\ u002D') sein kann, um einen negativen Wert oder ein ASCII-Pluszeichen '+' ('\ u002B') anzugeben. um einen positiven Wert anzuzeigen. Der resultierende Integer-Wert wird zurückgegeben, genau so, als ob das Argument und der Radix 10 als Argumente für die Methode parseInt (java.lang.String, int) angegeben würden.

Parameter: -: der ganzzahligen Wert dargestellt durch das Argument in dezimalem s ein String mit der int Darstellung

Returns geparst werden enthält.

Auslöser: NumberFormatException - wenn die Zeichenfolge keine analysierbare Ganzzahl enthält.


was Sie tun können, wenn Sie wissen, dass alles ‚£ xxxx.xx sein wird“, ist diese Zeile ändern kann

interest(Integer.parseInt(balanceLabel.getText())); 

dazu

interest(Double.parseDouble(balanceLabel.getText().substring(1)); 

, die dann "1000.0" zurückgeben würde

public String substring(int beginIndex) 

Gibt eine Zeichenfolge zurück, die eine Teilzeichenfolge dieser Zeichenfolge ist. Die Teilzeichenfolge beginnt mit dem Zeichen am angegebenen Index und erstreckt sich bis zum Ende dieser Zeichenfolge. Beispiele:

"unglückliche" .substring (2) gibt "glücklich"

"Harbison" .substring (3) gibt "Bison"

"Leere".substring (9) liefert "" (eine leere Zeichenkette)

Parameter: beginIndex - der Anfangsindex, inklusive.

Gibt die angegebene Teilzeichenfolge zurück.

Auslöser: IndexOutOfBoundsException - wenn beginIndex negativ oder größer als die Länge dieses String-Objekts ist.

+0

Ja, ich verstehe, dass das £ -Zeichen im Wesentlichen die Ursache des Problems ist. Ich habe versucht, Ihre Codezeile zu verwenden, und ich bekomme den gleichen Fehler, aber ohne das £ in der Nummer. ZB _Für Eingabezeichenfolge: "1000.0" _ –

+0

Entschuldigung, meine Schuld, ich sah mir das an, bevor ich etwas zu essen bekam. Ich habe eine Bearbeitung vorgenommen, im Wesentlichen 1000.0 kann keine Ganzzahl sein, es ist ein Double, also sollten Sie "Integer" in "Double" ändern. Hoffe, das hilft, ich habe meinen Code geändert, um dies zu reflektieren. Lassen Sie mich wissen, wenn es andere Probleme gibt. Die Ausnahme tritt auf, weil "die Zeichenfolge keine analysierbare ganze Zahl enthält". Ihr Interesse muss entweder einen doppelten Wert liefern, oder Sie müssen die zusätzlichen Werte nach dem Komma loswerden, aber es scheint, dass Sie den Dezimalwert sicher wollen, also gehen Sie mit Doppel. – XaolingBao

+0

Sehr schön. Danke für deine Zeit und dein Wissen. Ich schätze es wirklich von Herzen! –

Verwandte Themen