如何防止由于将字符串转换为int而导致的数字格式异常

时间:2019-02-26 19:11:52

标签: java int numberformatexception

因此,我一直在尝试将我的字符串转换为整数,并且遇到数字格式异常。我正在将813.0的字符串传递给下面的对象,但是失败。

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

4 个答案:

答案 0 :(得分:2)

813.0从技术上讲不是int,因为它有一个小数位。而是float。您的选择是剥除小数点后(包括小数点)的所有内容,或将其解析为float,然后使用您喜欢的任何方法转换为int(即舍入或截断)

答案 1 :(得分:0)

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

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

希望有帮助。

答案 2 :(得分:0)

尝试使用Double.parseDouble(“ 813.0”),因为您的输出将返回十进制值。 Integer.parseInt()仅在非十进制数字的情况下才有用。

答案 3 :(得分:0)

首先,考虑setTotalPremium接受double还是float。或者是否应该。如果是这样,请使用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和/或DecimalFormat来解析具有千位分隔符的数字。