2015-10-16 113 views
1

我試圖將字符串轉換爲long並且拋出NumberFormatException。我認爲它完全不在long的範圍之內。用於將字符串轉換爲long的java.lang.NumberFormatException

這裏是要轉換的代碼,其中count_strng是我想要轉換爲long的字符串。 trim()函數沒有任何區別。

long sum_link = Long.parseLong(count_strng.trim()); 

這是堆棧跟蹤。

java.lang.NumberFormatException: For input string: "0.003846153846153846" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
at java.lang.Long.parseLong(Long.java:441) 
at java.lang.Long.parseLong(Long.java:483) 

任何人都知道這裏的確切問題是什麼?

+0

你能分享你寫的觸發這個異常的代碼嗎? –

+0

至少寫一些代碼。很難拿出一個答案,只是看到錯誤:) –

+13

'0.003846153846153846'不是很長。試試Double.parseDouble – Eran

回答

5

Long.parseLong()試圖解析輸入字符串轉換成long。在Java中,longdefined such that

長數據類型是一個64位二進制補碼整數。

一個整數是defined such that

(意爲「整體」來自於拉丁文整數)的整數是可以沒有小數部分被寫入的數。

錯誤你得到節目你試圖解析輸入字符串爲"0.003846153846153846",這顯然確實有小數部分。如果你想分析一個浮點數,你應該使用Double.parseDouble()

+0

謝謝......我明白了我的理念...... –

6

隨着你輸入的字符串其實不是long,解析成long將拋出NumberFormatException。相反試試這個

Double d = Double.parseDouble(count_strng.trim()); 
Long l = d.longValue(); 
+1

小問題,但d.longValue()不輪 - 它只是像一個演員會切掉小數部分。 – Monz

0

長類型表示數學整數。 (整數也表示數學整數,但範圍小於Long)

Long和Integer不能表示具有小數點或小數部分的值。解析器通過拒絕您提供的字符串來強制執行此規則。

如果您想分析一個可能包含小數點的字符串並將結果值作爲Long使用,您首先必須將其解析爲Double,然後將其轉換爲Long。

從Double到Long的轉換可以通過以下兩種方法之一完成:截取小數部分(基本上忽略它)並以數學方式舍入小數部分。要截斷,使用一個強制類型來輪詢使用Math.round()方法。

Hers'a一個例子:

String s = "0.51"; // Greater than 0.50 so will round up 
double d = Double.parseDouble(s); 

System.out.println(d); // The parsed double 

System.out.println((int)d); // Double converted to int and truncated (fractional part dropped) 

System.out.println(Math.round(d)); // Double converted to int with mathematical rounding 

這段代碼打印

0.51 
0 
1 

另外:trim()是一個字符串函數,從字符串中刪除空白字符 - 它沒有做任何數學。