在 Java BigInteger 中使用科学格式的字符串进行初始化?
Initialization with string in scientific format in Java BigInteger?
我需要处理大量数字(1E100 - 1E200 范围内的数字)。但是BigInteger
class这个貌似比较适合的,初始化的时候不识别科学格式的字符串,也不支持转换成格式的字符串。
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 是在假设用户必须在输入中键入数百个零的情况下设计的。
科学计数法仅在有限范围内适用于 BigInteger
s - 即当 E
前面的数字的小数点后位数与指数值相同或更少时.在所有其他情况下,一些信息将会丢失。
Java 提供了一种解决此问题的方法,让 BigDecimal
为您解析科学记数法,然后使用 toBigInteger
方法将值转换为 BigInteger
:
BigInteger i2 = new BigDecimal("1E10").toBigInteger();
可以通过使用 constructor that takes BigInteger
:
构造 BigDecimal
来转换为科学记数法
System.out.println(new BigDecimal(i2).toEngineeringString());
我需要处理大量数字(1E100 - 1E200 范围内的数字)。但是BigInteger
class这个貌似比较适合的,初始化的时候不识别科学格式的字符串,也不支持转换成格式的字符串。
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 是在假设用户必须在输入中键入数百个零的情况下设计的。
科学计数法仅在有限范围内适用于 BigInteger
s - 即当 E
前面的数字的小数点后位数与指数值相同或更少时.在所有其他情况下,一些信息将会丢失。
Java 提供了一种解决此问题的方法,让 BigDecimal
为您解析科学记数法,然后使用 toBigInteger
方法将值转换为 BigInteger
:
BigInteger i2 = new BigDecimal("1E10").toBigInteger();
可以通过使用 constructor that takes BigInteger
:
BigDecimal
来转换为科学记数法
System.out.println(new BigDecimal(i2).toEngineeringString());