以下函数可以编译,但只能与 Doubles 一起使用:
fun triang(x: Double): Double {
var m = x - truncate(x)
if (m < 0) m += 1.0
return when {
m < 0.25 -> 4.0 * m
m < 0.50 -> 2.0 - 4.0 * m
m < 0.75 -> 2.0 - 4.0 * m
else -> 4.0 * m - 4.0
}
}
我也希望能够将该函数与 Floats 一起使用,所以我尝试将它变成一个通用函数:
fun <T: Number> triang(x: T): T {
var m = x.toDouble() - truncate(x.toDouble())
if (m < 0) m += 1.0
return when {
m < 0.25 -> 4.0 * m
m < 0.50 -> 2.0 - 4.0 * m
m < 0.75 -> 2.0 - 4.0 * m
else -> 4.0 * m - 4.0
} as T // problem here
}
但这不起作用,因为转换为 T 会导致警告“未经检查的转换:双倍转换为 T”。
如何正确地为 Float 和 Double 编写通用函数?