Hive查询语言有一个PMOD函数,可以用来计算余数。这个函数可以很好地处理整数和双。例如,当4.7除以2时,计算余数。
选择PMOD(4.7,2);
用hive查询语言对此查询的答案是0.7
谷歌大查询有MOD功能来计算剩余部分。但是这个函数只适用于整数。
选择MOD(4.7,2);在google中不工作。
可以在大查询中将4.7转换为INT64。那么MOD函数就能工作了,但答案是1而不是0.7
在google大查询中使用浮动数据点计算剩余部分的任何帮助都将非常有用。
发布于 2020-02-11 15:41:01
计算浮点值的剩余部分是一个有趣的概念,我个人至今还没有听说过这个概念。
根据您的描述,这基本上是关于寻找一个整数部分的余数,并将一个分数部分加到结果中吗?
如果是这样的话,可能可以通过使用以下表达式(在您的示例中)来模拟:MOD(FLOOR(4.7),2) + 4.7 - FLOOR(4.7),考虑到整数部分是FLOOR(4.7),因此小数部分是4.7 - FLOOR(4.7)
UPD。这一项假定为非负浮点值,在负值情况下,分数部分明显是value - CEIL(value)。使用value - TRUNC(value)可以泛化两种情况下的小数部分的查找,但我不太确定MOD()对负值的结果,所以我将把它留给您
发布于 2022-11-15 11:15:28
有趣的是,MOD是在数字数据类型上定义的,并且似乎在浮点数上工作得很好。如果您将FLOAT64类型的参数传递给它,它就会出错。所以你能做的就是
SELECT MOD(CAST(4.7 AS NUMERIC), CAST(2 AS NUMERIC))与mangusta上面的答案相反,如果您的第二个参数也是浮动的话,这也是有效的。例如。
SELECT MOD(CAST(2.5 AS NUMERIC), CAST(0.4 AS NUMERIC))这将返回0.1,因为这是2.5 - 6*0.4的剩余部分。
另一个很明显的解决方案是,如果你知道你有固定数量的小数(让我们称之为N),你可以把两边相乘10^N,所以在两个小数的情况下,你可以把两边乘以100,转换成整数,并确保你的MOD操作是正确的。如果你有一个任意数量的小数,那么我想,我想只要相信向上转换,然后是正确的MOD (我很有信心它确实正确地工作)。
https://stackoverflow.com/questions/60172025
复制相似问题