首页 > 解决方案 > Kotlin 测试浮点数是否在开放或半开放范围内

问题描述

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

例如像

val inRange = 10.f in (0.0f until 20f)

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

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

标签: kotlinrange

解决方案


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)

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


推荐阅读