将字符串转换为长整型时出现java.lang.NumberFormatException异常

6

我正在尝试将一个字符串转换为长整型,但它抛出了NumberFormatException异常。我认为它绝不会超出long的范围。

这是用于转换的代码,其中count_strng是我想要转换为长整型的字符串。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)

大家知道这里的确切问题是什么吗?


你能分享一下触发这个异常的代码吗? - Greg Brown
15
0.003846153846153846不是一个长整型数。请尝试使用Double.parseDouble进行转换。 - Eran
1
当你是初学者并正在学习某些东西时...很抱歉要说:尽量不要“思考”。你所谓的思考是指你脑海中有一些“概念”,你想将它应用到你面前的代码中。这是个坏主意。因为 - 当你不知道你在思考的事情时...你的“概念”很可能是“错误”的。相反,仔细地先学习“概念”,然后将其转化为源代码。长话短说:问题不是字符串太长,而是长数字是整数。0点几不是... - GhostCat
@Jägermeister 尽量不要思考?就像你所说的,他有这样一个概念。但是这是错误的。他在这里发帖有什么问题,让别人指出他的错误吗? - Carlos Bribiescas
1
非常感谢...使用parseDouble对我很有帮助。我明白了。很抱歉第一次没有发布代码。我也在尝试学习如何发布问题。谢谢大家。 :) - Keval Shah
显示剩余2条评论
3个回答

10

Long.parseLong()试图将输入字符串解析为long类型。在Java中,long定义为:

long数据类型是一个64位的二进制补码整数。

整数被定义为:

整数(源自拉丁语 integer,意为“完整的”)是一个没有小数部分的数字。

您得到的错误显示您正在尝试解析的输入字符串是"0.003846153846153846",这显然具有小数部分。

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


9

由于您的输入字符串实际上不是一个 long 类型,将其解析为 long 将会抛出 NumberFormatException 异常。建议尝试以下方法:

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

2
小细节,但是 d.longValue() 不会四舍五入 - 它只是像强制转换一样截取小数部分。 - Monz

0

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

长整型和整数不能表示带有小数点或分数部分的值。解析器通过拒绝您提供的字符串来强制执行此规则。

如果您想解析可能包含小数点并将结果值用作长整型的字符串,则首先必须将其解析为双精度浮点数,然后将其转换为长整型。

从双精度浮点数到长整型的转换可以通过两种方式之一完成:截断小数部分(基本上只是忽略它)和按数学四舍五入小数部分。要截断,请使用强制转换,要进行四舍五入,请使用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()是一个字符串函数,它可以从字符串中删除空格字符 - 它不执行任何数学计算。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接