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

时间:2015-06-25 12:08:29

标签: java biginteger

我需要使用大数字(在1E100 - 1E200范围内)。但是,BigInteger类似乎通常是合适的,在初始化期间不识别科学格式的字符串,也不支持转换为格式的字符串。

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

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

1 个答案:

答案 0 :(得分:13)

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

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

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

使用constructor that takes BigInteger构建BigDecimal可以转换为科学记数法:

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