【问题标题】:How can I check if a value is of type Integer?如何检查值是否为整数类型?
【发布时间】:2012-09-24 02:39:40
【问题描述】:

我需要检查一个值是否为整数。我发现了这个:How to check whether input value is integer or float?,但如果我没记错的话,即使 value 本身确实是 @987654323,变量仍然是 double 类型@。

【问题讨论】:

  • 您是如何获得输入的?是字符串吗?
  • @Code-Guru:我根本不应该说输入。对不起,我的意思是“任何价值”。我现在正在编辑。
  • 即便如此,我们仍然需要更多细节。您如何存储要检查的这个值?
  • @Code-Guru: 哦,好吧... 它有时是一个字符串,但有时我想用一个双精度来尝试它。我不知道这会有所作为:(
  • @Voldemort Java 程序。仅此一项就回答了我对波特书籍的很多问题。

标签: java integer


【解决方案1】:

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

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

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

【讨论】:

  • 咳咳 try/catch parseint.
【解决方案2】:

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

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;
}

【讨论】:

  • 使用 == 比较双精度数(如在您的 isDoubleInt() 方法中)是危险的,因为会丢失精度。相反,您应该执行Math.floor(d) - d &lt; DELTA; 之类的操作,其中DELTA 设置为某个非常小的值。
  • 您的代码错误。应该是 &lt; TOLERANCE 而不是 &gt; TOLERANCE
  • @andresp 谢谢!固定。
  • 不客气。您在 1E-5 之后仍然缺少分号,但是一旦您尝试编译,就会很容易注意到这一点。
  • 这个答案被低估了。我正在使用它来对双精度数(Apache POI 始终将数字视为双精度数)是否“打算”显示为整数进行有根据的猜测,以便我可以使用 Gson(它将查看我的对象表示,我想要成为整数)转换为 JSON。
【解决方案3】:
if (x % 1 == 0)
    // x is an integer

这里的x 是一个数字原语:shortintlongfloatdouble

【讨论】:

    【解决方案4】:

    试试这个方法

    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");
    }
    

    【讨论】:

    • 正如 Code-Guru 在我的回答中指出的那样,d 可能看起来像这样:47.000000001,由于精度损失。确切地说,您永远不能相信双重。使用范围检查来解决这个问题。
    【解决方案5】:

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

    Object object = your_value;

    if(object instanceof Integer) {
    
    Integer integer = (Integer) object ;
    
    } else {
     //your value isn't integer
    }
    

    【讨论】:

      【解决方案6】:

      这是检查String是否为Integer的函数?

      public static boolean isStringInteger(String number ){
          try{
              Integer.parseInt(number);
          }catch(Exception e ){
              return false;
          }
          return true;
      }
      

      【讨论】:

        【解决方案7】:

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

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

        【讨论】:

          【解决方案8】:

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

          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!");
          }
          

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

              试试这个sn-p的代码

              private static boolean isStringInt(String s){
                  Scanner in=new Scanner(s);
                  return in.hasNextInt();
              }
              

              【讨论】:

                【解决方案11】:

                这可以工作:

                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");
                }
                

                【讨论】:

                  【解决方案12】:

                  你可以使用模数%,解决方法就是这么简单:

                  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");
                      }
                  
                  
                  }
                  }
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2013-11-16
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2023-03-14
                    • 1970-01-01
                    相关资源
                    最近更新 更多