BigInteger 对我的号码来说很小
BigInteger is small for my number
我在 java 中使用了非常大的数字。我正在使用 BigInteger。我的十六进制数字是 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff
十进制是这样的:
1.1579208921035625e+77
代码:
public class BigNumber
{
public static void main(String[] args)
{
BigInteger fp = new BigInteger(0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff);
}
}
然后出现错误:
BigNumber.java:5: error: integer number too large: ffffffff00000001000000000000000000000000ffffffffffffffffffffffff
BigInteger fp = new BigInteger(0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff);
如何在不丢失数据的情况下使用这个大数字?这可能吗 ?我以为 BigInteger 只受内存限制。
那是因为你需要使用String
constructor, that also takes a radix。在本例中,基数为 16。
public static void main(String[] args) {
BigInteger fp = new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16);
System.out.println(fp);
}
在您的代码段中,十六进制值被转换为 int
,因为它是 integer literal,并且由于它太大而无法放入 int
,因此会引发错误.
由于您不使用 String
来包含数据,因此 java 编译器将其视为 int
并相应地进行处理。对于类型 int
:
来说显然太大了
使用
new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16)
相反。
文字 0xfff..
是整数文字。编译器检测到文字溢出,这会导致编译错误。
可以放在字符串中,指定基数为BigDecimal
BigInteger fp = new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",16);
顺便说一句,不存在采用整数作为参数的构造函数,但编译器选择 return 此错误消息。
我在 java 中使用了非常大的数字。我正在使用 BigInteger。我的十六进制数字是 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff
十进制是这样的:
1.1579208921035625e+77
代码:
public class BigNumber
{
public static void main(String[] args)
{
BigInteger fp = new BigInteger(0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff);
}
}
然后出现错误:
BigNumber.java:5: error: integer number too large: ffffffff00000001000000000000000000000000ffffffffffffffffffffffff
BigInteger fp = new BigInteger(0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff);
如何在不丢失数据的情况下使用这个大数字?这可能吗 ?我以为 BigInteger 只受内存限制。
那是因为你需要使用String
constructor, that also takes a radix。在本例中,基数为 16。
public static void main(String[] args) {
BigInteger fp = new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16);
System.out.println(fp);
}
在您的代码段中,十六进制值被转换为 int
,因为它是 integer literal,并且由于它太大而无法放入 int
,因此会引发错误.
由于您不使用 String
来包含数据,因此 java 编译器将其视为 int
并相应地进行处理。对于类型 int
:
使用
new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", 16)
相反。
文字 0xfff..
是整数文字。编译器检测到文字溢出,这会导致编译错误。
可以放在字符串中,指定基数为BigDecimal
BigInteger fp = new BigInteger("ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",16);
顺便说一句,不存在采用整数作为参数的构造函数,但编译器选择 return 此错误消息。