如何防止string转int导致的数字格式异常

How to prevent a number format exception caused by converting string to an int

所以我一直在尝试将我的字符串转换为整数,但我遇到了数字格式异常。我将字符串 813.0 传递给下面的对象,但它失败了。

totals.setTotalPremium(Integer.parseInt(r.getTotalpremium().replace(",","").trim()));

813.0 在技术上不是 int,因为它有小数位。相反,它是 float。您的选择是去掉小数点后(包括)小数点后的所有内容,或者将其解析为 float 然后转换为 int,使用您喜欢的任何方法(即舍入与截断) .

您可以将其解析为 double,然后像这样提取 int 值:

    Double v = Double.parseDouble("813.0");
    totals.setTotalPremium(v.intValue());

希望对您有所帮助。

尝试 Double.parseDouble("813.0") 作为输出 returns 十进制值。 Integer.parseInt() 仅在非十进制数的情况下有用。

首先,考虑 setTotalPremium 是否接受 doublefloat。或者是否应该。如果是这样,请使用 Double.parseDouble("813.0")Float.parseFloat("813.0").

如果不是,请决定您想要的四舍五入。如果有的话。对于 813.0 这可能很简单,你想要 813。但是如果它是 813.1、813.5、813.8 呢?

如果您想四舍五入到最接近的 int,请使用 Math.round(Float.parseFloat("813.0"))。如果您想拒绝不等于 int 的数字:

    double doubleValue = Double.parseDouble("813.0");
    if (doubleValue != Math.rint(doubleValue)) {
        throw new IllegalStateException("Not a whole number: " + doubleValue);
    }

编辑:在您的代码中,您将 ,(逗号)替换为空字符串。如果这是解析带有千位分隔符的数字,比如 1,813.0,最好不要。而是使用 NumberFormat and/or DecimalFormat 来解析具有一千 separator/s.

的数字