在 Java BigInteger 中使用科学格式的字符串进行初始化?

Initialization with string in scientific format in Java BigInteger?

我需要处理大量数字(1E100 - 1E200 范围内的数字)。但是BigIntegerclass这个貌似比较适合的,初始化的时候不识别科学格式的字符串,也不支持转换成格式的字符串。

BigDecimal d = new BigDecimal("1E10"); //works
BigInteger i1 = new BigInteger("10000000000"); //works
BigInteger i2 = new BigInteger("1E10"); //throws NumberFormatException
System.out.println(d.toEngineeringString()); //works
System.out.println(i1.toEngineeringString()); //method is undefined

有办法吗?我无法想象这样的 class 是在假设用户必须在输入中键入数百个零的情况下设计的。

科学计数法仅在有限范围内适用于 BigIntegers - 即当 E 前面的数字的小数点后位数与指数值相同或更少时.在所有其他情况下,一些信息将会丢失。

Java 提供了一种解决此问题的方法,让 BigDecimal 为您解析科学记数法,然后使用 toBigInteger 方法将值转换为 BigInteger

BigInteger i2 = new BigDecimal("1E10").toBigInteger();

可以通过使用 constructor that takes BigInteger:

构造 BigDecimal 来转换为科学记数法
System.out.println(new BigDecimal(i2).toEngineeringString());