我在尝试将字符串转换为Long时遇到错误。
Long l = Long.parseLong(str);
例外是:
java.lang.NumberFormatException: For input string: "20120828000040464018674B"
at java.lang.Long.parseLong(Long.java:415)
at java.lang.Long.parseLong(Long.java:461)
答案 0 :(得分:2)
该数字太大而无法在Java中表示为long
。可能最大的long
是9223372036854775807L
。请改用BigDecimal
。
此外,最后一个字符是字母B
,任何数字都无效。
答案 1 :(得分:2)
它似乎是日期/时间而不是数字
String dt = "20120828000040464018674B";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
Date date = sdf.parse(dt.substring(0, 17));
int nanos = Integer.parseInt(dt.substring(17, 17 + 6));
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
System.out.printf("%s%06d%n", sdf2.format(date), nanos);
打印
2012/08/28 00:00:40.464018674
答案 2 :(得分:0)
20120828000040464018674B
不是长文字(最后是B)
答案 3 :(得分:0)
System.out.println(Long.MAX_VALUE);
// prints 9223372036854775807
// yours' 20120828000040464018674B
答案 4 :(得分:0)
为什么不选择BigInteger类
答案 5 :(得分:0)
根据Javadoc for Long,Long.MAX_Value
定义为 2 ^ 63 - 1 。您提供的值大于给定值,因此会抛出 NumberFormatException 。