Так как вы действительно беспокоитесь о позиции десятков, я просто сдвинул ее один раз и проверил на 0..10:
fun Double.isSpecial() = (this * 10.0) in (0..10).map(Int::toDouble)
Тестирование с play.kotlinlang.org:
fun main() {
listOf(0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0).forEach(::checkSpecial)
listOf(0.01, 0.11, 0.22, 1.01).forEach(::checkSpecial)
}
fun checkSpecial(value: Double) {
println("$value isSpecial = ${value.isSpecial()}")
}
Выходы:
0.0 isSpecial = true
0.1 isSpecial = true
0.2 isSpecial = true
0.3 isSpecial = true
0.4 isSpecial = true
0.5 isSpecial = true
0.6 isSpecial = true
0.7 isSpecial = true
0.8 isSpecial = true
0.9 isSpecial = true
1.0 isSpecial = true
0.01 isSpecial = false
0.11 isSpecial = false
0.22 isSpecial = false
1.01 isSpecial = false
Если вы меньше беспокоитесь об элегантности и больше о производительности, вы можете просто сделать:
fun Double.isSpecial() = when (this) {
0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0 -> true
else -> false
}
, что позволяет избежать выделения каких-либо наборов иливарьируется целиком.Если диапазон не является динамическим, я бы просто пошел с этим лично.