gpt4 book ai didi

scala - 将两个 BigInt 值相除并将结果转换为 Scala 中的 Float

转载 作者:行者123 更新时间:2023-12-04 10:35:57 25 4
gpt4 key购买 nike

我有一个数据框,其中包含 类型的两列大整数 .然后我有一个用户定义的函数,它对这两列执行操作,最终结果应该是 类型。 float .

def generateNewColumnValue(firstColumnValue: BigInt, secondColumnValue: BigInt): Float = {
val calculated = scala.math.pow(firstColumnValue.toFloat / secondColumnValue, 1.0/3.0);
return calculated;
}

val generateNewColumnValueUDF = udf[Float, BigInt, BigInt](generateNewColumnValue);

如您所见,在 UDF 的主体内部,我正在做一些非常简单的计算。问题是我收到以下错误,我不明白为什么这是不可能的:
command-836521033094408:9: error: overloaded method value / with alternatives:
(x: Double)Double <and>
(x: Float)Float <and>
(x: Long)Float <and>
(x: Int)Float <and>
(x: Char)Float <and>
(x: Short)Float <and>
(x: Byte)Float
cannot be applied to (BigInt)
val calculated = scala.math.pow(firstColumnValue.toFloat / secondColumnValue, 1.0/3.0);

问题是,如果我尝试将其转换为较低范围的类型(如 Int),我可能会在小数点后丢失一些值。

最佳答案

消息只是说您可以划分 Float通过 Double , Float等,但不是 BigInt .调用 toFloat在两个操作数上,而不仅仅是一个:

firstColumnValue.toFloat / secondColumnValue.toFloat

但是 math.pow需要 Double s,而不是 Float s,所以 toDouble更有意义。
如果结果必须是 Float , 调用 toFloat关于 pow 的结果,而不是它的论点。

或通过 BigDecimal :
(BigDecimal(firstColumnValue) / BigDecimal(secondColumnValue)).toDouble

在大多数情况下,它应该给出与第一个选项大致相同的结果,但速度较慢;问题是 BigInt s 可以大到 firstColumnValue.toDouble返回 Double.PositiveInfinity/ NegativeInfinity .你可以检查一下,在这种情况下只使用第二个选项。

关于scala - 将两个 BigInt 值相除并将结果转换为 Scala 中的 Float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60186544/

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