当 var 包含 ".0" 时如何将字符串转换为 BigInteger



我有一个 String 变量,其中可能包含一个类似" 2015.0"的数字。当我尝试使用

将其转换为int时
int i = Integer.parseInt(myVar) 

的biginteger
BigInteger bi = new BigInteger(myVar) 

我得到错误

java.lang.NumberFormatException: For input string: "2015.0"

我如何才能获得正确的演员?

谢谢!

您可以将其解析为BigDecimal,然后转换为BigInteger

BigInteger bi = new BigDecimal("2015.0").toBigInteger()

请注意,这样做时您可能会丢失精度信息:

...这个大数的任何部分都将被丢弃。请注意,此转换可能会丢失有关BigDecimal值精确度的信息。

如果转换不精确,则会引发异常(换句话说,如果丢弃了非零的分数部分),使用tobigintegerexact()方法。

如引用的Javadocs中所建议的,使用toBigIntegerExact()防止精确的意外损失,例如将"2.5"转换为BigInteger所产生的精度(感谢Ole v.v.的评论。

您也可以将其解析为 double,然后将其施放到int

将小数部分放置
int i = (int) Double.parseDouble(myVar);

您不能将float转换为BigInteger,并且您的字符串具有小数点,因此自动被认为是float。您有几个选项,但最简单的可能是从字符串中剥离小数部分以获取" 2015",然后使用来构造您的BigInteger

当然,这是假设该数字的小数部分没关系。如果确实如此,请考虑使用BigDecimal,而是考虑。

最新更新