2013-04-03 52 views
-3

我的問題是在代碼是不接受的浮點數字 所以我應該做的部分代碼請任何修改建議我..我怎樣才能使它接受浮動ponit數

{ 在異常線程 「主」 java.lang.NumberFormatException:對於輸入字符串: 「320.9」

at java.lang.NumberFormatException.forInputString(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at org.lrap.otc.OTCVerification.verifyOtc(OTCVerification.java:26) 

//代碼部分// INT紙幣=的Integer.parseInt(strArray [2] .trim());

at org.lrap.main.Main.run(Main.java:68) 

//代碼部分//布爾retVal的= OTCVerification.getOTCVerificationObj()verifyOtc(消息)。

at org.lrap.main.Main.main(Main.java:111) 

只是調用run函數 } 感謝ü所有誰[R協助我:-)

+0

你應該向我們展示也代碼,例外是不夠的 –

回答

1

對於輸入字符串: 「320.9」

在java.lang中。 的Integer.parseInt(來源不明)

使用Double.parseDouble用分數來解析號碼。不是Integer.parseInt

如果輸入可能不是一個數字格式的數字,那麼您應該使用DecimalFormat.parse並使用適當的語言環境來識別使用本地約定格式化的數字(例如在歐洲部分地區爲320,9)。

0

那麼,如果你想要一個浮點數,使用Double.parseDoublenew BigDecimal

double target = Double.parseDouble(theString); 
// Or 
BigDecimal target = new BigDecimal(theString); 

如果你想要一個整數,使用String#indexOf找到.,然後使用String#substring.之前只有出局,並繼續使用Integer.parseInt

int index = theString.indexOf('.'); 
if (index >= 0) { 
    theString = theString.substring(0, index); 
} 
int target = Integer.parseInt(theString); 

或者,像Mike Samuel指出在評論下方,使用Double.parseDouble然後轉換爲int

int target = (int)Double.parseDouble(theString); 
+1

除非整數部分不適合'雙'尾數,否則不需要使用'indexOf'和'substring'。只需解析爲「double」,然後向下轉換爲「int」,該整數將趨向零。 –

+0

@MikeSamuel:當然,我可以看到這種方法。我想我仍然會隔離我想要解析的字符串,然後用正確的方法解析它,但正如你所說的那樣也應該工作。而且,由於你在'double'中得到15位左右的精度,而最大的'int'是2,147,483,647(13位),所以你不應該遇到尾數問題。 –

0
Integer.parseInt(String s) 

用於轉換的有效字符串integer.And應值介於-2,147,483,648至2,147,483,647之間。它不接受任何浮點數。

對於轉換爲浮點,可以使用Double.parseDouble or new BigDecimal.

0

要轉換一個「浮點數字」,你也應該知道使用NumberFormat的。如果您要轉換字符串「320.9」,那麼在大多數語言環境中都可以。如果您的程序在「法語」機器上運行,則浮點數字可能會以「320,9」的形式出現。

Double.parse僅適用於「。」作爲分隔符(正確地說,它取決於sun.misc.FloatingDecimal.readJavaFormatString(String in))。所以,如果你可以依靠具有分隔符,你是罰款Double.parse

如果你要處理這兩種情況下,你可以使用這樣的事情:

final String num = "320,9"; 
final NumberFormat nf_french = NumberFormat.getInstance(Locale.FRENCH); // French Number Format (= xxx,yyy) 
final double result_french = nf_french.parse(num).doubleValue(); // => 320.9 
final NumberFormat nf_us = NumberFormat.getInstance(Locale.US); // US Number Format (= xxx.yyy) 
final double result_us = nf_us.parse(num).doubleValue(); // => 3209.0 !!