2017-07-31 12 views
2

計算の出力が整数であるかどうかをチェックする方法とは何ですか?私はこれをやってみました:計算の出力が整数であるかどうかの確認

if ((i/3) is Int) { 
print("Whole Number") 
} 

しかし、それは出力のものではなく、変数の種類をチェックしているようです。


編集:変数が整数の場合どうやら、それは自動的に操作の出力を丸め、私はこのような何かをしなければならなかった:Kotlinで

if((i.toFloat()/3) == (i/3).toFloat()){ 
     println("Whole Number") 
+0

'i'が' Int'型にキャストされている間は 'Int'になります。' Int'を 'Double'などで分割することはできません - 私は' 1〜2週間前に1〜2つのシンプルな "プロジェクト"のようにKotlinに多くの経験がありますが、それはほとんどすべての強く型付けされた言語の場合です。 –

答えて

1

isオペレータが確認するために使用されますオブジェクトのインスタンス

ここにあなたが書いた(i/3) is Int手段:あなたがチェックしている

は、(i/3)はintまたはないのインスタンスです。

コトルでは、数字が整数であるかどうかをチェックするために、以下のコードを書かなければなりません。残りをチェックするa/bは全体の数であるかどうかをチェックするために

if((i/3).toInt().compareTo(i/3) == 0) { 
    print("Whole Number") 
} 
+0

'(i/3).toInt()==(i/3)'は 'i'が' Int'ならば常に真であり、そうでなければ無効なコードです。 – hotkey

5

簡単な方法です:がint

if((i/3).toInt() == (i/3)) { 
    print("Whole Number") 
} 

ある

場合はそうでない場合、あなたはまた、以下のコードを使用することができます0の場合:a % b == 0

ただし、/の両方のオペランドが整数型(ShortIntLong)である場合、除算結果は、整数は、(小数部分は単に廃棄され)常に、その結​​果、あなたが持っている場合a val i: Int = 2であり、i % 3 == 1であるが、i/3 == 0である。小数除算を使用するには、少なくとも1つのオペランドを小数のi/3.0またはi.toDouble/3のようにします。

Doubleが完全であることを確認する場合は、d % 1.0 == 0.0を使用するか、Math.floor(d) == dを確認してください。 Doubleか否かを確認する

+0

私はその質問と他の答えを3回読んで、誰もこの*答えを与えていないと信じられませんでした。 – GhostCat

+0

この[code](https://pastebin.com/PmhnsHhX)には何らかの理由があり、2番目の変数には未解決の参照エラーがあります。どうすればこの問題を解決できますか? –

+0

Kotlinでは 'a%b'の代わりに' a.rem(b) 'を書いた方が好きです。これにより、コードが読みやすくなります。 –

1

一つの方法は、小数部分を取得し、ゼロと比較する整数部分を減算することであろう(これは単に分割以上の作品)の計算の種類を知らなくても整数である。

fun isWhole(value: Double):Boolean { 
    return value - value.toInt() == 0.0 
} 
+0

'value'が' Int'の範囲外であると不正な結果になります。 – Ilya

+0

大きい数字で作業している場合、 'toInt'を' toLong'に変更することもできます。 –

+0

'Long'でも範囲の範囲が制限されています。 @ホットキーの答えでこの問題の影響を受けていない一般的な解決策を見てください。 – Ilya

関連する問題