如何防止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
是否接受 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
and/or DecimalFormat
来解析具有一千 separator/s.
的数字
所以我一直在尝试将我的字符串转换为整数,但我遇到了数字格式异常。我将字符串 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
是否接受 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
and/or DecimalFormat
来解析具有一千 separator/s.