如何检查String是否包含十进制并转换为最接近的整数?

时间:2017-07-19 17:08:42

标签: java floating-point integer double

如何检查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,如果有更简单的方法,请告诉我。

3 个答案:

答案 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