问题 在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

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


11145
2018-06-25 12:08


起源



答案:


科学记数法适用于 BigInteger只在有限的范围内 - 即当前面的数字 E 小数点后面的数字比指数的值多或少。在所有其他情况下,一些信息将丢失。

Java提供了一种方法来解决这个问题 BigDecimal 为您解析科学记数法,然后将值转换为 BigInteger 运用 toBigInteger 方法:

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

转换为科学记数法可以通过构建来完成 BigDecimal 用一个 需要的构造函数 BigInteger

System.out.println(new BigDecimal(i2).toEngineeringString());

13
2018-06-25 12:11