如何检查String中是否包含整数或十进制数字? 此外,我想将数字四舍五入为最接近的整数(如果它是十进制数),然后将其转换回字符串。
说,我有一个名为“amount”的字符串,其值可以是“23”或“33.42”,在这种情况下,我想将“33.42”转换为“33”
以下是我的尝试:
// Assume amount String has already been declared
try{
Double number = Double.parseDouble(amount);
logger.info("Double Detected");
int integer = (int) Math.round(number);
logger.info("Converting to String Integer");
amount = Integer.toString(integer);
}catch(NumberFormatException e){
logger.info("Double NOT Detected");
}
当我尝试解析“Double”时,我在上面的代码中得到Null Pointer Exception,如果有更简单的方法,请告诉我。
答案 0 :(得分:2)
试试这个:
amount = new BigDecimal(amount).setScale(0, BigDecimal.ROUND_HALF_UP).toString();
这将为您提供所需的输出。
答案 1 :(得分:1)
将数量初始化为“”,以便在您的算法找不到要转换为字符串的Integer时它不会为null。
答案 2 :(得分:0)
为避免空指针,您可以执行多捕获语句,如下所示:
public static void main(String args[]){
String amount = "3.14159265";
try {
Double number = Double.parseDouble(amount);
System.out.println("Double Detected");
System.out.println(number);
int integer = (int) Math.round(number);
System.out.println("Converting to String Integer");
System.out.println(integer);
amount = Integer.toString(integer);
} catch (NumberFormatException | NullPointerException e1) { //catches both exceptions
System.out.println("Double NOT Detected: ");
System.out.println(e1);
}
}
尝试将金额更改为null
或字母,以查看异常是如何捕获的。
确保您也初始化amount
。