Kotlin 测试 float 是否处于开放或半开放范围

Mar*_*ann 4 range kotlin

在 Kotlin 中 - 是否有一种惯用的方法来测试浮点数是否在一个(或两者)范围的开始或结束是互斥的范围内?

例如类似的东西

val inRange = 10.f in (0.0f until 20f)
Run Code Online (Sandbox Code Playgroud)

我似乎在文档中找不到任何关于此的内容。

更新:如何处理半开放范围?

Eug*_*nko 7

until函数创建半封闭整数(非浮点数)范围,其中包括左侧部分,排除右侧部分。 https://kotlinlang.org/docs/reference/ranges.html

Koltin https://kotlinlang.org/docs/reference/ranges.html#utility-functions支持封闭浮动范围

你可以自己实现

data class OpenFloatRange(val from: Float, val to: Float)
infix fun Float.open(to: Float) = OpenFloatRange(this, to)
operator fun OpenFloatRange.contains(f: Float) = from < f && f < to

val inRange = 10f in (0.0f open 20f)
Run Code Online (Sandbox Code Playgroud)

这里我使用了 Kotlin 的几个技巧:https : //kotlinlang.org/docs/reference/functions.html#infix-notation https://kotlinlang.org/docs/reference/operator-overloading.html#in