我试过了:
import kotlin.Double.Companion.POSITIVE_INFINITY
import kotlin.Double.Companion.NaN
const val inf = POSITIVE_INFINITY
const val nan = NaN
但我明白了:
Const'val'初始值设定项应为常量值
修改
我需要这样做是因为Junit5's parametrized tests:
@ParameterizedTest
@ValueSource(doubles = doubleArrayOf(nan, inf, -2* epsilon, 1.5, -0.5, 1.0 + 2* epsilon))
fun ensureNotAProbability(number: Double)
{
...
}
由于Java注释的某些限制(在this SO answer中描述),传递给注释的东西只能是编译时常量。因此,我需要编译时NaN,正数和负数无穷大。
答案 0 :(得分:5)
作为一种解决方法,您可以使用以下事实:IEEE 754标准保证0.0 / 0.0
为NaN,1.0 / 0.0
为+∞:
@Suppress("DIVISION_BY_ZERO")
const val NAN: Double = 0.0 / 0.0
@Suppress("DIVISION_BY_ZERO")
const val INFINITY: Double = 1.0 / 0.0
fun main(args: Array<String>) {
println(NAN) // NaN
println(INFINITY) // Infinity
}
答案 1 :(得分:2)
您无需重新定义任何内容。只需import with an alias:
import kotlin.Double.Companion.POSITIVE_INFINITY as inf
import kotlin.Double.Companion.NaN as nan