如何处理大于机器代表号的数字?
假设现在我正在为我的数据库分配ID号,数据库是巨大的(项目超过机器代表号)。
我正在使用Java,我知道Java中最大的数据类型是long int(64位)。 我怎么能处理比这更大的数字?
我的解决方案之一总是将数字转换为字符串,这将导致开销,我仍然不知道如何累积要转换为字符串的数字(大于MAX_VALUE)。
使用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)你必须使用方法add
, subtract
等而不是+
, -
等。
此外, BigInteger
(及其浮点模拟, BigDecimal
)比原始类型慢得多。 BigInteger
适用于大多数情况,但如果可能,请在性能敏感代码中避免使用它。
您在Java中有大数字的特定类,例如BigInteger 。
Java在其标准库中有一个类java.math.BigInteger
,用于保存(并执行算术)任意大整数。
但是,如果您不需要执行算术运算,就像数据库ID一样,普通的String
也可以正常工作。
至于如何在将数字转换为String
之前获取数字,这取决于您访问数据库的方式。 如果使用最标准的JDBC选项,则会在某个点上有一个java.sql.ResultSet
。 您可以调用ResultSet.getString(int columnIndex)
或ResultSet.getString(String columnName)
方法,即使数据库中的列是数字,也可以立即从中获取String,而无需通过中间的int
或long
变量。