如何处理大于机器代表号的数字?

时间:2014-04-15 15:23:09

标签: java

现在假设我正在为我的数据库分配ID号,数据库很大(超过机器代表号的物品)。

我正在使用Java,我知道Java中最大的数据类型是long int(64位)。我怎么能处理比这更大的数字?

我的一个解决方案是始终将数字转换为字符串,这将导致开销,我仍然不知道如何累积要转换为字符串的数字(大于MAX_VALUE)。

3 个答案:

答案 0 :(得分:7)

使用java.math.BigInteger

BigInteger a = new BigInteger("123456789012345678901234567890");
BigInteger b = new BigInteger("314159265");
BigInteger c = a.add(b);
System.out.println(c);

注意(1)BigInteger是不可变的,(2)你必须使用方法addsubtract等而不是+,{{1等等。

此外,-(及其浮点模拟,BigInteger)比原始类型慢得多。 BigDecimal适用于大多数情况,但如果可能,请在性能敏感代码中避免使用它。

答案 1 :(得分:2)

您在Java中拥有特定的大数字类,例如BigInteger

答案 2 :(得分:0)

Java在其标准库中有一个类java.math.BigInteger,用于保存(并执行算术)任意大整数。

但是如果您不需要执行算术运算,就像数据库ID一样,普通String也可以正常工作。

关于如何在将数字转换为String之前获取数字,这取决于您访问数据库的方式。如果您使用最标准的选项 JDBC ,您将在某些点上拥有java.sql.ResultSet。您可以调用ResultSet.getString(int columnIndex)ResultSet.getString(String columnName)方法,即使数据库中的列是数字,也可以立即从中获取String,而无需通过中间int或{{1变量。