用于将字符串转换为long的java.lang.NumberFormatException

时间:2015-10-16 17:39:41

标签: java string numberformatexception

我正在尝试将字符串转换为long,然后抛出NumberFormatException。我认为它根本不在long的范围之内。

以下是要转换的代码,其中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)

任何人都知道这里的确切问题是什么?

3 个答案:

答案 0 :(得分:7)

由于您的输入字符串实际上不是 long ,因此解析为 long 会抛出 NumberFormatException 。而是尝试这个

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

答案 1 :(得分:6)

Long.parseLong()正在尝试将输入字符串解析为long。在Java中,longdefined such that

  

长数据类型是64位二进制补码整数。

整数是defined such that

  

一个整数(来自拉丁语整数,意思是“整数”)是一个可以在没有小数分量的情况下编写的数字。

您收到的错误显示您尝试解析的输入字符串为"0.003846153846153846",显然确实是一个小数组件。

如果要解析浮点数,则应使用Double.parseDouble()

答案 2 :(得分:0)

长类型表示数学整数。 (整数也表示数学整数,但范围小于Long)

Long和Integer不能表示具有小数点或小数组件的值。解析器通过拒绝您提供的字符串来强制执行此规则。

如果要解析可能包含小数点的字符串并将结果值用作Long,则首先必须将其解析为Double,然后将其转换为Long。

从Double到Long的转换可以通过以下两种方式之一完成:截断小数部分(基本上只是忽略它)并以数学方式舍入小数部分。要截断,请使用强制转换来使用Math.round()方法。

她的一个例子:

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()是一个String函数,用于从字符串中删除空白字符 - 它不会进行任何数学运算。