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

时间:2019-02-27 12:30:59

标签: java casting biginteger

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

int i = Integer.parseInt(myVar) 

或BigInteger与

BigInteger bi = new BigInteger(myVar) 

我收到错误

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

我如何获得正确的演员表?

谢谢!

3 个答案:

答案 0 :(得分:5)

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

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

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

  

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

     

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

如引用的javadocs中所建议,请使用toBigIntegerExact()来防止意外的精度损失,例如由于将"2.5"转换为BigInteger而导致的精度损失(感谢Ole V.V.'s comment为此)。

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

您无法将float转换为BigInteger,并且您的字符串具有小数点,因此它会自动被视为float。您有几种选择,但最简单的方法可能是从字符串中去除小数部分以获得“ 2015”,然后使用 that 构造您的BigInteger

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