Следующая функция компилируется, но может использоваться только с 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, поэтому я попытался превратить ее в обобщенную функцию c :
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 вызывает предупреждение «Непроверенное приведение: Double to T».
Как правильно написать обобщенную функцию c для Float и Double?