65

我需要检查一个值是否为整数。我发现了这个:如何检查输入值是整数还是浮点数?,但如果我没记错的话,double即使本身确实是一个integer.

4

12 回答 12

103

如果输入值可以是整数以外的数字形式,请检查

if (x == (int)x)
{
   // Number is integer
}

如果正在传递字符串值,请使用Integer.parseInt(string_var). 请确保在转换失败时使用 try catch 进行错误处理。

于 2012-09-24T02:59:16.443 回答
29

如果您有一个双精度/浮点/浮点数并想查看它是否为整数。

public boolean isDoubleInt(double d)
{
    //select a "tolerance range" for being an integer
    double TOLERANCE = 1E-5;
    //do not use (int)d, due to weird floating point conversions!
    return Math.abs(Math.floor(d) - d) < TOLERANCE;
}

如果您有一个字符串并想查看它是否为整数。最好不要丢弃Integer.valueOf()结果:

public boolean isStringInt(String s)
{
    try
    {
        Integer.parseInt(s);
        return true;
    } catch (NumberFormatException ex)
    {
        return false;
    }
}

如果您想查看某物是否是 Integer 对象(因此包装了int):

public boolean isObjectInteger(Object o)
{
    return o instanceof Integer;
}
于 2012-09-24T03:52:17.767 回答
16
if (x % 1 == 0)
    // x is an integer

x是一个数字原语:short, int, long,floatdouble

于 2018-09-01T08:06:27.433 回答
8

试试这种方式

try{
    double d= Double.valueOf(someString);
    if (d==(int)d){
        System.out.println("integer"+(int)d);
    }else{
        System.out.println("double"+d);
    }
}catch(Exception e){
    System.out.println("not number");
}

但是整数范围之外的所有数字(如“-1231231231231231238”)都将被视为双精度数。如果你想摆脱这个问题,你可以试试这种方式

try {
    double d = Double.valueOf(someString);
    if (someString.matches("\\-?\\d+")){//optional minus and at least one digit
        System.out.println("integer" + d);
    } else {
        System.out.println("double" + d);
    }
} catch (Exception e) {
    System.out.println("not number");
}
于 2012-09-24T03:01:20.000 回答
8

您应该使用instanceof运算符来确定您的值是否为整数;

对象对象 = your_value;

if(object instanceof Integer) {

Integer integer = (Integer) object ;

} else {
 //your value isn't integer
}
于 2015-09-20T19:54:14.550 回答
5

这是检查 String 是否为 Integer 的功能?

public static boolean isStringInteger(String number ){
    try{
        Integer.parseInt(number);
    }catch(Exception e ){
        return false;
    }
    return true;
}
于 2016-11-25T10:54:57.673 回答
1

这可以工作:

int no=0;
try
{
    no=Integer.parseInt(string);
    if(string.contains("."))
    {
        if(string.contains("f"))
        {
            System.out.println("float");
        }
        else
            System.out.println("double");
    }
}

catch(Exception ex)
{
    Console.WriteLine("not numeric or string");
}
于 2012-09-24T02:58:03.573 回答
1

要检查字符串是否包含表示整数的数字字符,您可以使用Integer.parseInt().

要检查 double 是否包含可以是整数的值,可以使用Math.floor()Math.ceil()

于 2012-09-24T03:53:54.530 回答
1

你需要先检查它是否是一个数字。如果是这样,您可以使用该Math.Round方法。如果结果和原始值相等,那么它是一个整数。

于 2014-08-05T13:46:00.423 回答
1

这是我知道启用负整数的最短方法:

Object myObject = "-1";

if(Pattern.matches("\\-?\\d+", (CharSequence) myObject);)==true)
{
    System.out.println("It's an integer!");
}

这是禁用负整数的方式:

Object myObject = "1";

if(Pattern.matches("\\d+", (CharSequence) myObject);)==true)
{
    System.out.println("It's an integer!");
}
于 2015-02-02T11:04:26.997 回答
1

试试这段代码

private static boolean isStringInt(String s){
    Scanner in=new Scanner(s);
    return in.hasNextInt();
}
于 2016-04-12T00:33:42.837 回答
0

您可以使用模数%,解决方案非常简单:

import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    System.out.println("Enter first number");
    Double m = scan.nextDouble();
    System.out.println("Enter second number");
    Double n= scan.nextDouble();

    if(m%n==0) 
    {
        System.out.println("Integer");
    }
    else
    {
        System.out.println("Double");
    }


}
}
于 2017-10-10T17:03:26.687 回答