Javaで数値が整数(Zフィールドに属する)であるかどうかを確認する方法や簡単な方法はありますか?
四捨五入した数値から引くことを考えたのですが、これに役立つ方法が見つかりませんでした。
どこで確認すればいいですか?整数API?
速くて汚い...
if (x == (int)x)
{
...
}
編集:これは、xがすでに他の数値形式になっていることを前提としています。文字列を扱っている場合は、を調べてInteger.parseInt
ください。
もう1つの例:)
double a = 1.00
if(floor(a) == a) {
// a is an integer
} else {
//a is not an integer.
}
この例では、ceilを使用でき、まったく同じ効果があります。
/**
* 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.
}
浮動小数点値について話している場合は、形式の性質上、非常に注意する必要があります。
これを行うことを私が知っている最良の方法は、イプシロン値、たとえば0.000001fを決定してから、次のようなことを行うことです。
boolean nearZero(float f)
{
return ((-episilon < f) && (f <epsilon));
}
それから
if(nearZero(z-(int)z))
{
//do stuff
}
基本的に、zとzの整数の場合が、ある程度の許容範囲内で同じ大きさであるかどうかを確認しています。フローティングは本質的に不正確であるため、これが必要です。
ただし、フロートの大きさが(2147483647)より大きい場合、これはおそらく壊れInteger.MAX_VALUE
ます。その値を超えるフロートの積分性をチェックすることは必然的に不可能であることに注意する必要があります。
ZIでは、整数を意味すると想定します。つまり、3.14、4.02などではなく3、-5,77です。
正規表現が役立つ場合があります。
Pattern isInteger = Pattern.compile("\\d+");
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'が整数であったためです。x
y
x==y
x % 1 == 0
x%1はx / 1の残差値を与えるため、使用できます。
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);
}
if((number%1)!=0)
{
System.out.println("not a integer");
}
else
{
System.out.println("integer");
}
int x = 3;
if(ceil(x) == x) {
System.out.println("x is an integer");
} else {
System.out.println("x is not an integer");
}
ceil関数とfloor関数が同じ値を返すかどうかを確認します
static boolean isInteger(int n)
{
return (int)(Math.ceil(n)) == (int)(Math.floor(n));
}
与えられたすべてのソリューションは優れていますが、それらのほとんどは静的コード分析(SONARなど)で問題を引き起こす可能性があります:「浮動小数点数が等しいかどうかをテストしないでください」(https://jira.sonarsource.com/browse/RSPEC-1244を参照) )。
テストする必要のある入力は文字列ではなくdoubleであると想定しています。
回避策として、整数でないかどうかをテストします。
public boolean isNotInteger(double x) {
return x - Math.floor(x) > 0;
}
// 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;
}