36

Javaで数値が整数(Zフィールドに属する)であるかどうかを確認する方法や簡単な方法はありますか?

四捨五入した数値から引くことを考えたのですが、これに役立つ方法が見つかりませんでした。

どこで確認すればいいですか?整数API?

4

13 に答える 13

72

速くて汚い...

if (x == (int)x)
{
   ...
}

編集:これは、xがすでに他の数値形式になっていることを前提としています。文字列を扱っている場合は、を調べてInteger.parseIntください。

于 2011-03-31T15:47:37.403 に答える
16

もう1つの例:)

double a = 1.00

if(floor(a) == a) {
   // a is an integer
} else {
   //a is not an integer.
}

この例では、ceilを使用でき、まったく同じ効果があります。

于 2011-03-31T16:01:51.023 に答える
5
/**
 * Check if the passed argument is an integer value.
 *
 * @param number double
 * @return true if the passed argument is an integer value.
 */
boolean isInteger(double number) {
    return number % 1 == 0;// if the modulus(remainder of the division) of the argument(number) with 1 is 0 then return true otherwise false.
}
于 2018-07-05T11:58:04.170 に答える
3

浮動小数点値について話している場合は、形式の性質上、非常に注意する必要があります。

これを行うことを私が知っている最良の方法は、イプシロン値、たとえば0.000001fを決定してから、次のようなことを行うことです。

boolean nearZero(float f)
{
    return ((-episilon < f) && (f <epsilon)); 
}

それから

if(nearZero(z-(int)z))
{ 
    //do stuff
}

基本的に、zとzの整数の場合が、ある程度の許容範囲内で同じ大きさであるかどうかを確認しています。フローティングは本質的に不正確であるため、これが必要です。

ただし、フロートの大きさが(2147483647)より大きい場合、これはおそらく壊れInteger.MAX_VALUEます。その値を超えるフロートの積分性をチェックすることは必然的に不可能であることに注意する必要があります。

于 2011-03-31T15:56:43.123 に答える
1

ZIでは、整数を意味すると想定します。つまり、3.14、4.02などではなく3、-5,77です。

正規表現が役立つ場合があります。

Pattern isInteger = Pattern.compile("\\d+");
于 2011-03-31T15:53:17.373 に答える
1
    double x == 2.15;

    if(Math.floor(x) == x){
        System.out.println("an integer");
    } else{
        System.out.println("not an integer");
    }

Math.ceil()同様に、この方法を使用してx、が整数であるかどうかを確認できると思います。これが機能するのは、Math.ceilまたはが最も近い整数(たとえば)にMath.floor切り上げられ、その場合、元の`x'が整数であったためです。xyx==y

于 2020-05-09T02:25:53.023 に答える
1

x % 1 == 0x%1はx / 1の残差値を与えるため、使用できます。

于 2021-04-05T02:52:43.897 に答える
0

xを1に変更すると、出力は整数になります。それ以外の場合は、整数ではなく、整数、10進数などをカウントします。

   double x = 1.1;
   int count = 0;
   if (x == (int)x)
    {
       System.out.println("X is an integer: " + x);
       count++; 
       System.out.println("This has been added to the count " + count);
    }else
   {
       System.out.println("X is not an integer: " + x);
       System.out.println("This has not been added to the count " + count);


   }
于 2013-12-08T18:19:07.353 に答える
0
    if((number%1)!=0)
    {
        System.out.println("not a integer");
    }
    else
    {
        System.out.println("integer");
    }
于 2014-10-29T10:31:23.697 に答える
0
 int x = 3;

 if(ceil(x) == x) {

  System.out.println("x is an integer");

 } else {

  System.out.println("x is not an integer");

 }
于 2016-05-08T11:11:27.030 に答える
0

ceil関数とfloor関数が同じ値を返すかどうかを確認します

static boolean isInteger(int n) 
{ 
return (int)(Math.ceil(n)) == (int)(Math.floor(n)); 
} 
于 2019-02-10T16:16:26.007 に答える
0

与えられたすべてのソリューションは優れていますが、それらのほとんどは静的コード分析(SONARなど)で問題を引き起こす可能性があります:「浮動小数点数が等しいかどうかをテストしないでください」(https://jira.sonarsource.com/browse/RSPEC-1244を参照) )。

テストする必要のある入力は文字列ではなくdoubleであると想定しています。

回避策として、整数でないかどうかをテストします。

public boolean isNotInteger(double x) {
    return x - Math.floor(x) > 0;
}
于 2021-08-18T13:34:15.757 に答える
-3

// C言語で..しかし、アルゴリズムは同じです

#include <stdio.h>

int main(){
  float x = 77.6;

  if(x-(int) x>0)
    printf("True! it is float.");
  else
    printf("False! not float.");        

  return 0;
}
于 2017-02-08T10:48:23.987 に答える