如何使用 bigquery 将结果四舍五入到小数点后 4 位



我们现在在 BigQuery 中没有十进制数据类型。所以我必须使用浮点

在 Bigquery 浮点数划分中

0.029*50/100=

0.014500000000000002

虽然

0.021*50/100=0.0105

向上舍入值

我必须使用round(floatvalue*10000(/10000。

这是现在在 BigQuery 中处理十进制数据类型的正确方法吗?

取决于您的编码偏好 - 例如,您可以使用简单的ROUND(floatvalue, 4)
取决于您需要如何向上或向下舍入 - 您可以分别调整表达式
例如ROUND(floatvalue + 0.00005, 4)

在下面的链接中查看 BigQuery Standard SQL 的所有舍入函数

https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#rounding-functions

请注意,这个问题现在应该得到不同的答案。

问题的前提是"我们现在在 BigQuery 中没有十进制数据类型"。

但是现在我们做到了:您可以使用NUMERIC

SELECT CAST('0.029' AS NUMERIC)*50/100
# 0.0145

只需使您的列NUMERIC而不是FLOAT64,您将获得所需的结果。

在大多数 SQL 方言中,向上舍入不是内置函数,除非您有幸向上舍入为整数。在这种情况下,CEIL是一个快速可靠的解决方案。

在四舍五入小数的情况下,我们也可以利用 CEIL,尽管需要几个额外的步骤。

程序:

  1. 将值相乘,将最后一个小数点移动到十分之一的位置。 例如,18.234 乘以 100 变为 1823.4。(n * 100(
  2. 使用 CEIL(( 向上舍入到最接近的整数。在我们的示例中,CEIL(n( = 1824。
  3. 将此结果除以步骤 1 中使用的相同数字。在我们的示例中,n/100 = 18.24。

简化这些步骤给我们留下了以下逻辑:

SELECT CEIL(value * 100) / 100 as rounded_up;

相同的逻辑可用于使用 FLOOR 函数向下舍入,如下所示:

FLOOR(value * 100) / 100 AS rounded_down;
<小时 />

感谢@Mureinik的回答。

相关内容

  • 没有找到相关文章

最新更新