我有一个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的任何小数部分都将被丢弃。请注意,此转换可能会丢失有关BigDecimal值精度的信息。
如果转换不精确(换句话说,如果丢弃非零小数部分),则抛出异常,使用toBigIntegerExact()方法。
正如在引用的javadocs中所建议的那样,使用toBigIntegerExact()
来防止精确度的意外损失,例如将"2.5"
转换为BigInteger
所导致的精度损失(感谢Ole V.V.'s comment的这句话)。
您也可以将其解析为double
然后通过将其转换为int
来删除小数部分
int i = (int) Double.parseDouble(myVar);
你不能将float
转换为BigInteger
,并且你的字符串有一个小数点,所以它自动被认为是float
。你有几个选项,但最简单的可能是从字符串中删除小数部分以获得“2015”,然后使用它来构建你的BigInteger
。
当然,这假设数字的小数部分无关紧要。如果是这样,请考虑使用BigDecimal
。