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

Fra*_*sco 2 java casting biginteger

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

int i = Integer.parseInt(myVar) 
Run Code Online (Sandbox Code Playgroud)

或BigInteger

BigInteger bi = new BigInteger(myVar) 
Run Code Online (Sandbox Code Playgroud)

我收到了错误

java.lang.NumberFormatException: For input string: "2015.0"
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

ern*_*t_k 5

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

BigInteger bi = new BigDecimal("2015.0").toBigInteger()
Run Code Online (Sandbox Code Playgroud)

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

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

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

正如引用的javadocs中所建议的那样,用于toBigIntegerExact()防止意外丢失精确度,例如转换"2.5"为转换后的精度损失BigInteger(感谢Ole VV对此评论的评论).

  • 正确.在大多数情况下,我更喜欢`toBigIntegerExact`来捕捉无法完成精确转换的情况. (4认同)