Kotlin:我如何检查一个数字是否有小数点(模数解决方案不起作用)

eLn*_*n86 3 kotlin

我是Kotlin的新手,来自JS.我目前正在制作一个计算器应用程序并正在使用'%'运算符.我需要找出'当前输入*0.01'的输出是整数还是小数点.通常,我会用

num % 1 !== 0
Run Code Online (Sandbox Code Playgroud)

但它在Kotlin中不起作用并且给出了错误"!=运算符不能应用于Double或Int".字符串或字符也是如此.我的Kotlin代码如下,希望有人可以提供帮助!谢谢!

val percentResult: Double() = result.toDouble() * 0.01
  if(percentResult % 1 != 0) {
   result = (NumberFormat.getInstance().format(percentResult)).toString()
  } else {
   result = percentResult.toInt().toString()
  }
Run Code Online (Sandbox Code Playgroud)

Ita*_*tay 16

在 Kotlin 中,您可以使用“rem”函数:

if (number.rem(1).equals(0.0))
Run Code Online (Sandbox Code Playgroud)


Coo*_*ind 7

请参阅/sf/answers/3179583151/

num % 1.0 != 0.0 // But better compare with a small constant like 1e-8.
Run Code Online (Sandbox Code Playgroud)

对于货币:

num.absoluteValue % 1.0 >= 0.005(或其他小常数)。


jrt*_*ell 6

等效代码

0是一个int,所以你需要明确地说你想要一个像这样的双:

fun factor100(n: Number) = n.toDouble() % 100.0 == 0.0
Run Code Online (Sandbox Code Playgroud)

为什么这可能不是你想要的

对于双值,由于浮点错误,这可能无法正常工作,因此您需要检查差异是否小于某个小量.

这是如何被打破的一个例子是:

fun main(args: Array<String>) {
    var x = 0.3 - 0.2         // 0.1 (ish)
    x *= 1000                 // 100 (ish)
    println(factor100(x))     // False
}

fun factor100(n: Number) = n.toDouble() % 100.0 == 0.0
Run Code Online (Sandbox Code Playgroud)