gpt4 book ai didi

generics - 浮点和 double 的 Kotlin 通用函数

转载 作者:行者123 更新时间:2023-12-02 13:44:00 25 4
gpt4 key购买 nike

以下函数可以编译,但只能与 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 编写通用函数?

最佳答案

Kotlin 不支持像 Java 这样的数字类型转换,也没有明确的方法可以将数字转换为删除数字类型。为 Double 和 Float 重载方法要好得多。

但是,您可以取消这个警告,因为实际上这段代码会先将返回值转换为 Number,然后它会调用 <number type>Value从它,但它不是很好,因为这个函数不是为整数值设计的,如果你调用 triang(1) ,会导致结果的精度损失。

关于generics - 浮点和 double 的 Kotlin 通用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60785434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com