java.lang.NumberFormatException 用于将字符串转换为长
java.lang.NumberFormatException for converting string to 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)
有人知道这里的确切问题是什么吗?
由于您的输入字符串实际上不是 long
,因此解析为 long
会抛出 NumberFormatException
。不如试试这个
Double d = Double.parseDouble(count_strng.trim());
Long l = d.longValue();
Long.parseLong()
正在尝试将输入字符串解析为 long
。在 Java 中,一个 long
是 defined such that:
The long data type is a 64-bit two's complement integer.
一个整数是defined such that:
An integer (from the Latin integer meaning "whole") is a number that can be written without a fractional component.
您收到的错误显示您尝试解析的输入字符串是 "0.003846153846153846"
,显然 确实有 小数部分。
如果你想解析一个浮点数,你应该使用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()
是一个字符串函数,它从字符串中删除空白字符 - 它不做任何数学运算。
我正在尝试将字符串转换为长字符串,但它抛出 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)
有人知道这里的确切问题是什么吗?
由于您的输入字符串实际上不是 long
,因此解析为 long
会抛出 NumberFormatException
。不如试试这个
Double d = Double.parseDouble(count_strng.trim());
Long l = d.longValue();
Long.parseLong()
正在尝试将输入字符串解析为 long
。在 Java 中,一个 long
是 defined such that:
The long data type is a 64-bit two's complement integer.
一个整数是defined such that:
An integer (from the Latin integer meaning "whole") is a number that can be written without a fractional component.
您收到的错误显示您尝试解析的输入字符串是 "0.003846153846153846"
,显然 确实有 小数部分。
如果你想解析一个浮点数,你应该使用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()
是一个字符串函数,它从字符串中删除空白字符 - 它不做任何数学运算。