【发布时间】:2018-12-20 00:28:51
【问题描述】:
我有一串有符号整数值,范围从“+2147483650”到“-9638527412”。我需要将它们解析为 32 位整数,这样,当字符串值高于整数容量 (2^31) 时,它应该返回最接近的可能整数值。使用“Integer.parseInt”会给出超出范围的异常。
示例:
input: "+2147483650"
output: "+2147483647"
input: ""-963852741258"
output: "-2147483648"
我尝试使用现有功能,但我被困在这里。
try{
//num =Integer.valueOf(stringNumber);
num =Integer.parseInt(stringNumber);
}catch(Exception e){
num = -2147483648; // if stringNumber is negative
num = +2147483647 // if stringNumber is positive
}
【问题讨论】:
-
使用
BigInteger.valueOf,然后酌情将其与Integer.MAX_VALUE和MIN_VALUE进行比较? -
@LouisWasserman @LouisWasserman 不会比
BigInteger更高效,因为它可能使用原生 64 位字而不是专为任意(无限)精度设计的类? -
@Andreas 超出了 OP 指定的有效输入范围