Java 如何解析十进制文本的整数

Java 如何解析十进制文本的整数,java,Java,我有以下要求: 输入字符串=1.00000应转换为int,因为实际上根本没有分数 输入字符串=1应转换为int 1 但是,输入字符串=1.0001应该是一个例外,因为它有分数 之前我假设Integer.valueOf1.00000应该返回一个整数,但它返回NumberFormatException 任何可以解决这个问题的Java库,或者至少可以检查1.0000是否是一个整数,这样我就可以安全地解析为Double并将其转换为int?解决这个问题的一种方法是,您可以使用正则表达式首先确保输入与数字的

我有以下要求:

输入字符串=1.00000应转换为int,因为实际上根本没有分数 输入字符串=1应转换为int 1 但是,输入字符串=1.0001应该是一个例外,因为它有分数 之前我假设Integer.valueOf1.00000应该返回一个整数,但它返回NumberFormatException


任何可以解决这个问题的Java库,或者至少可以检查1.0000是否是一个整数,这样我就可以安全地解析为Double并将其转换为int?

解决这个问题的一种方法是,您可以使用正则表达式首先确保输入与数字的格式完全匹配,小数部分是可选的,如果完全匹配,则全部为零,如果是,则继续解析它,否则抛出异常或执行任何您想执行的操作。检查这个Java代码

List<String> list = Arrays.asList("1.00000","1","1.0001");
Pattern intPat = Pattern.compile("(\\d+)(\\.0+)?");

list.forEach(x -> {
    Matcher m = intPat.matcher(x);
    if (m.matches()) {
        int num = Integer.parseInt(m.group(1));
        System.out.println(num);
    } else {
        System.out.println(x +" is not a pure Integer"); // Throw exception or whatever you like
    }
});
List<String> list = Arrays.asList("1.00000","1","1.0001");

list.forEach(x -> {
    double num = Double.parseDouble(x);
    if (num == (int)num) {
        System.out.println((int)num);
    } else {
        System.out.println(x + " is not a pure Integer");
    }
此外,只要您使用的数字被限制在整数范围内,这一切都很好,但为了确保数字不超过整数限制,您可能需要使用不同的量词

另一种更简单的解决方案是,将数字解析为double,并将其与int形式进行比较,如果两者相等,则它是纯整数,否则不是。我更喜欢这个,而不是第一个使用正则表达式的解决方案。Java代码

List<String> list = Arrays.asList("1.00000","1","1.0001");
Pattern intPat = Pattern.compile("(\\d+)(\\.0+)?");

list.forEach(x -> {
    Matcher m = intPat.matcher(x);
    if (m.matches()) {
        int num = Integer.parseInt(m.group(1));
        System.out.println(num);
    } else {
        System.out.println(x +" is not a pure Integer"); // Throw exception or whatever you like
    }
});
List<String> list = Arrays.asList("1.00000","1","1.0001");

list.forEach(x -> {
    double num = Double.parseDouble(x);
    if (num == (int)num) {
        System.out.println((int)num);
    } else {
        System.out.println(x + " is not a pure Integer");
    }

解决这个问题的一种方法是,您可以使用正则表达式首先确保输入与数字的格式完全匹配,小数部分是可选的,如果是,则全部为零,如果是,则继续解析它,否则抛出异常或任何您想做的事情。检查这个Java代码

List<String> list = Arrays.asList("1.00000","1","1.0001");
Pattern intPat = Pattern.compile("(\\d+)(\\.0+)?");

list.forEach(x -> {
    Matcher m = intPat.matcher(x);
    if (m.matches()) {
        int num = Integer.parseInt(m.group(1));
        System.out.println(num);
    } else {
        System.out.println(x +" is not a pure Integer"); // Throw exception or whatever you like
    }
});
List<String> list = Arrays.asList("1.00000","1","1.0001");

list.forEach(x -> {
    double num = Double.parseDouble(x);
    if (num == (int)num) {
        System.out.println((int)num);
    } else {
        System.out.println(x + " is not a pure Integer");
    }
此外,只要您使用的数字被限制在整数范围内,这一切都很好,但为了确保数字不超过整数限制,您可能需要使用不同的量词

另一种更简单的解决方案是,将数字解析为double,并将其与int形式进行比较,如果两者相等,则它是纯整数,否则不是。我更喜欢这个,而不是第一个使用正则表达式的解决方案。Java代码

List<String> list = Arrays.asList("1.00000","1","1.0001");
Pattern intPat = Pattern.compile("(\\d+)(\\.0+)?");

list.forEach(x -> {
    Matcher m = intPat.matcher(x);
    if (m.matches()) {
        int num = Integer.parseInt(m.group(1));
        System.out.println(num);
    } else {
        System.out.println(x +" is not a pure Integer"); // Throw exception or whatever you like
    }
});
List<String> list = Arrays.asList("1.00000","1","1.0001");

list.forEach(x -> {
    double num = Double.parseDouble(x);
    if (num == (int)num) {
        System.out.println((int)num);
    } else {
        System.out.println(x + " is not a pure Integer");
    }
大十进制类 Java本身有一个库,它可以做到这一点:

例如:

private static int parse(String input) throws ArithmeticException {
    return new BigDecimal(input).intValueExact();
}
如果BigDecimal对象的小数部分不为零,则该方法会引发算术异常。

BigDecimal类 Java本身有一个库,它可以做到这一点:

例如:

private static int parse(String input) throws ArithmeticException {
    return new BigDecimal(input).intValueExact();
}

如果BigDecimal对象的小数部分不为零,则该方法会引发算术异常。

1.00000永远不是整数。谁给了你这些要求,为什么?1.00000永远不是整数。谁给了你这些要求,为什么?这确实是最好的答案。我不得不删除我的。这确实是最好的答案。我不得不删除我的。