2011-01-20 137 views
1

我有一個TextField,我可以在其中鍵入值;我需要將鍵入的值轉換爲Int並將其與S.O.Println一起顯示。將TextField值轉換爲Int

EDIT: 

現在我已經試過:

try { 
int i = Integer.parseInt(myText.getText()); 
System.out.println("This is an integer " + i);    
} 
catch (NumberFormatException x) { 
System.out.println("Error : "+ x.getMessage()); 
} 

但它給我:

This is an integer 122    // When I type 122 
Error : For input string: "122,5"  // When I type 122,5 
Error : For input string: "122.5"  // When I type 122.5 

任何想法。

EDIT:

這是它:

double d = Double.parseDouble(myText.getText()); 
int i = (int)d; 

回答

3

看來你用的是逗號作爲分隔符,而不是一個點。無論如何,你將無法將其解析爲int。您需要Double.parseDouble(..)

使用可以使用與當前語言環境對應的NumberFormat來解析輸入。

如果您正在使用SWT(標記爲eclipse) - 我認爲您可以通過在文本字段中添加VerifyListener來限制可能的字符。在您的聽衆中,如果允許輸入,則在傳遞的事件上調用doit()

如果使用AWT(TextField是AWT的文本組件) - 然後看看something like this

+0

立即查看更新。 – VisaMasterCard 2011-01-20 22:31:19

+0

@VisaMasterCard當然,它不是一個整數。這是雙倍的。 – Bozho 2011-01-20 22:32:15

-1

這是因爲myText.getText()11,5(不是數字),而不是11.5(雙)。

嘗試這樣做,

Double.parseDouble(myText.getText().replaceAll(",", ".")); 

這將替換,.

另外,使用NumberFormat做你的號碼轉換。


而且,我注意到你解析double數字時使用Integer.parseInt()。這就是你拋出異常的原因。

您應該使用NumberFormat.getInstance(locale).parse(myText.getText())來得到您需要的結果。不要忘了,parse()返回Number對象,因此要獲得雙,做到這一點:

double d = NumberFormat.getInstance(locale).parse(myText.getText()).doubleValue(); 
+0

這可能是由於語言環境的差異。在需要處理本地化的應用程序中,您的解決方案會非常危險,因爲逗號在某些國家代表千位分隔符並不罕見。這應該使用NumberFormat來處理。 – rfeak 2011-01-20 22:32:05

0

您嘗試解析字符串「11.5」爲整數。這絕對不是整數。因此拋出異常。

您可以嘗試使用Double.parseDouble(),結果取決於您的區域設置。如果你是英文locale,它期望點(。)而不是昏迷,所以數字無論如何應該看起來像11.5

0

逗號給你一個解析錯誤。如果您需要逗號,您可以將其用作分隔符並分別解析雙方。

下面是一個在字符串中分隔兩個逗號分隔值的示例。

String str = "1,2,3,4"; 
StringTokenizer st = new StringTokenizer(str, ","); 
while (st.hasMoreTokens()) { 
    System.out.println(st.nextToken()); 
} 

輸出將是:

1 
2 
3 
4 
0

11,5不是一個數字,Java可以沒有其他互動解析。你可以用一個小數點(根據您所在地區)替換逗號,以消除任何空間沿:

Double.parseDouble(myText.getText().replaceAll(",", ".").replaceAll(" ", "")); 

注:

不能使用逗號作爲千位分隔符。