如何在没有 NumberFormatException 的情况下将 String 转换为 long?
How to convert String to long without NumberFormatException?
我想附加这些长变量,所以我先把它们变成了字符串。当我 return 他们回到 long 时它会抛出 NumberFormatException。
public long BLZ = 12345678l;
public long KNr = 1234567890l;
public String landCode = "1314";
long fedor = Long.parseLong(String.valueOf(BLZ) + String.valueOf(KNr) +
landCode + "00");
long BLZ = 12345678l;
long KNr = 1234567890l;
String landCode = "1314";
System.out.println(Long.MAX_VALUE);
System.out.println(String.valueOf(BLZ) + String.valueOf(KNr) + landCode + "00");
导致输出
9223372036854775807
123456781234567890131400
您尝试解析的数字大于 long
可以处理的数量。
编辑:您询问了如何解决您的问题。在你的问题的评论中有一个理论,你想计算一个 IBAN 的校验和。您可以使用 java.math.BigInteger
:
System.out.println(Long.MAX_VALUE);
long BLZ = 12345678l;
long KNr = 1234567890l;
String landCode = "1314";
String val = String.valueOf(BLZ) + String.valueOf(KNr) + landCode + "00";
System.out.println(val);
System.out.println(BigInteger.valueOf(98).subtract(new BigInteger(val).mod(BigInteger.valueOf(97))));
这将导致以下输出:
9223372036854775807
123456781234567890131400
87
或者你可以检查 IBAN Documentation(它是德语,但我想这对你来说应该不是问题 ;-) 在第 4 章中有一个计算校验和的方法的描述,如果你'重新限制(像这里)。您仍然需要 longs
才能实现它,因为 9 位数字可以超出 int
.
的范围
我想附加这些长变量,所以我先把它们变成了字符串。当我 return 他们回到 long 时它会抛出 NumberFormatException。
public long BLZ = 12345678l;
public long KNr = 1234567890l;
public String landCode = "1314";
long fedor = Long.parseLong(String.valueOf(BLZ) + String.valueOf(KNr) +
landCode + "00");
long BLZ = 12345678l;
long KNr = 1234567890l;
String landCode = "1314";
System.out.println(Long.MAX_VALUE);
System.out.println(String.valueOf(BLZ) + String.valueOf(KNr) + landCode + "00");
导致输出
9223372036854775807
123456781234567890131400
您尝试解析的数字大于 long
可以处理的数量。
编辑:您询问了如何解决您的问题。在你的问题的评论中有一个理论,你想计算一个 IBAN 的校验和。您可以使用 java.math.BigInteger
:
System.out.println(Long.MAX_VALUE);
long BLZ = 12345678l;
long KNr = 1234567890l;
String landCode = "1314";
String val = String.valueOf(BLZ) + String.valueOf(KNr) + landCode + "00";
System.out.println(val);
System.out.println(BigInteger.valueOf(98).subtract(new BigInteger(val).mod(BigInteger.valueOf(97))));
这将导致以下输出:
9223372036854775807
123456781234567890131400
87
或者你可以检查 IBAN Documentation(它是德语,但我想这对你来说应该不是问题 ;-) 在第 4 章中有一个计算校验和的方法的描述,如果你'重新限制(像这里)。您仍然需要 longs
才能实现它,因为 9 位数字可以超出 int
.