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

问题描述 投票:-1回答:4

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

totals.setTotalPremium(Integer.parseInt(r.getTotalpremium().replace(",","").trim()));
java int numberformatexception
4个回答
0
投票

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


2
投票

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


0
投票

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

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

希望它有所帮助。


0
投票

首先,考虑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和/或DecimalFormat来解析具有一千个分隔符的数字。

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