数字格式异常 -2147483648

问题描述 投票:0回答:1

我写了一个方法来反转有符号整数。如果反转的数字不在 INT_MAX 和 INT_MIN 范围内,它将返回 0。它适用于除 -2147483648 之外的几乎所有情况 在调试时,我发现代码无法正确处理 -2147483648 的符号,而它适用于不同的签名输入。

有人可以解释为什么 Math.abs(x) 对于这个测试用例不能正常工作吗? 下面给出方法。

public int reverse(int x) {
        boolean flag = (x>0);
        x = Math.abs(x);

        String num = new StringBuilder(Integer.toString(x)).reverse().toString();
        
        long temp = Long.parseLong(num);

        if(!flag){
            temp = -temp;
        }

        if((Integer.MAX_VALUE < temp) || ( temp < Integer.MIN_VALUE)){
            return 0;
        }

        return (int) temp;
    }
java string numberformatexception
1个回答
0
投票

在Java中,整数表示从Integer.MIN_VALUE = -2^31 = -2147483648到Integer.MAX_VALUE = 2^31-1 = 2147483647。没有与-2147483648相反的正值可以表示。

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