当var包含“.0”时,如何将String转换为BigInteger

问题描述 投票:2回答:3

我有一个String变量,可能包含一个这样的数字“2015.0”。当我尝试将其转换为int时

int i = Integer.parseInt(myVar) 

或BigInteger

BigInteger bi = new BigInteger(myVar) 

我收到了错误

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

我怎样才能实现正确的演员表?

谢谢!

java casting biginteger
3个回答
5
投票

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

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

请注意,执行此操作时可能会丢失精度信息:

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

如果转换不精确(换句话说,如果丢弃非零小数部分),则抛出异常,使用toBigIntegerExact()方法。

正如在引用的javadocs中所建议的那样,使用toBigIntegerExact()来防止精确度的意外损失,例如将"2.5"转换为BigInteger所导致的精度损失(感谢Ole V.V.'s comment的这句话)。


0
投票

您也可以将其解析为double然后通过将其转换为int来删除小数部分

int i = (int) Double.parseDouble(myVar);

-1
投票

你不能将float转换为BigInteger,并且你的字符串有一个小数点,所以它自动被认为是float。你有几个选项,但最简单的可能是从字符串中删除小数部分以获得“2015”,然后使用它来构建你的BigInteger

当然,这假设数字的小数部分无关紧要。如果是这样,请考虑使用BigDecimal

© www.soinside.com 2019 - 2024. All rights reserved.