2017-07-31 73 views
2

什么是检查计算输出是否为整数的方法?我试过这样做:检查计算的输出是否是整数

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

但它似乎是检查变量的类型,而不是输出是什么。


编辑:显然,如果变量是一个整数,它会自动四舍五入操作的输出,所以我不得不做这样的事情:

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

只要'i'被转换成'Int'类型,它将成为'Int',你不能用'Double'等来分割'Int'等等 - 我应该加上I don'在Kotlin方面有很多经验,就像一两个简单的“项目”在一两周前一起玩,但大多数所有强类型语言都是如此。 –

回答

1

is在科特林运营商用于检查对象的实例。

在这里,你已经写(i/3) is Int手段:

您正在检查(I/3)为int与否的一个实例。

在Kotlin,你必须写下面的代码来检查一个数字是否是一个整数。

如果是一个int

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

否则,你也可以使用下面的代码:

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

'(i/3).toInt()==(i/3)'如果'i'是一个'Int'则总是为真,如果不是,则为无效代码。 – hotkey

5

一个简单的方法来检查a/b是否是一个整数是检查剩余为零:a % b == 0

注意,但是,如果/两个操作数都是整型(ShortIntLong),那么划分结果始终是一个整数(小数部分只是丢弃),所以,如果你有一个val i: Int = 2然后i % 3 == 1i/3 == 0。要使用小数除法,至少应使其中一个小数部分为i/3.0i.toDouble/3

如果你想检查一个Double是整体,你可以使用d % 1.0 == 0.0或检查Math.floor(d) == d

+0

我三次阅读这个问题和其他答案,并不相信没有人给出这个答案。当我看到您的尝试时即将开始输入;-) – GhostCat

+0

是否有任何理由与此[代码](https://pastebin.com/PmhnsHhX),第二个变量有一个未解决的参考错误。我将如何解决这个问题? –

+0

在Kotlin中,我宁愿写'a.rem(b)'而不是'a%b'。这使得代码更具可读性 –

1

一种方法来检查Double是否是不知道的计算类型(这个工程的不仅仅是师以上)的整体数量将减去整数部分,以获得分数部分,并比较为零:

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

如果'value'在'Int'范围之外,这会产生错误的结果。 – Ilya

+0

如果您使用的数字很大,它也会将'toInt'更改为'toLong'。 –

+0

'长'也有有限的范围界限。在@ hotkey的答案中查看不受此问题影响的一般解决方案。 – Ilya