Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于将字符串转换为长字符串的java.lang.NumberFormatException_Java_String_Numberformatexception - Fatal编程技术网

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

用于将字符串转换为长字符串的java.lang.NumberFormatException,java,string,numberformatexception,Java,String,Numberformatexception,我试图将字符串转换为long,它抛出NumberFormatException。我不认为它超出了长的范围 这里是要转换的代码,其中count\u strng是我要转换为long的字符串修剪()功能没有任何区别 long sum_link = Long.parseLong(count_strng.trim()); 这是stacktrace java.lang.NumberFormatException: For input string: "0.003846153846153846" at ja

我试图将字符串转换为long,它抛出
NumberFormatException
。我不认为它超出了
长的范围

这里是要转换的代码,其中
count\u strng
是我要转换为long的字符串<代码>修剪()
功能没有任何区别

long sum_link = Long.parseLong(count_strng.trim());
这是stacktrace

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)

有人知道这里的确切问题是什么吗?

由于您的输入字符串实际上不是
长的
,解析为
长的
将引发
数字格式异常
。不如试试这个

Double d = Double.parseDouble(count_strng.trim());
Long l = d.longValue();
Long.parseLong()
正在尝试将输入字符串解析为
Long
。在Java中,
long
是:

长数据类型是64位2的补码整数

整数是:

整数(来源于拉丁语整数,意思是“整”)是一个不含小数成分的数字

您得到的错误显示您试图解析的输入字符串是
“0.0038461538446153846”
,显然有一个分数分量


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

长类型表示数学整数。(Integer也表示数学整数,但范围小于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()
是一个从字符串中删除空白字符的字符串函数-它不做任何计算。

您可以共享您编写的触发此异常的代码吗?至少编写一些代码。仅仅看到错误就很难找到答案:)
0.0038461538446153846
不是很长。当你是一个初学者,并且学习一些东西的时候,试试Double.parsedouble。。。抱歉地说:尽量不要“思考”。你所说的思考是指你脑子里有一些“概念”,你想把它应用到你面前的代码中。坏主意。因为-当你不知道你在想什么的时候。。。你的“概念”可能是“错误的”。相反,首先要认真学习“概念”;然后将其转换为源代码。长话短说:这不是说绳子太长;很简单,长数字就是整数。0点有些东西不是…非常感谢…使用parseDouble对我有效。我明白了。很抱歉,第一次尝试时没有发布代码。我也在努力学习发帖问题。谢谢大家。:)次要的一点,但d.longValue()不舍入-它只是像石膏一样切掉小数部分。