我们现在在 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,尽管需要几个额外的步骤。
程序:
- 将值相乘,将最后一个小数点移动到十分之一的位置。 例如,18.234 乘以 100 变为 1823.4。(n * 100(
- 使用 CEIL(( 向上舍入到最接近的整数。在我们的示例中,CEIL(n( = 1824。
- 将此结果除以步骤 1 中使用的相同数字。在我们的示例中,n/100 = 18.24。
简化这些步骤给我们留下了以下逻辑:
SELECT CEIL(value * 100) / 100 as rounded_up;
相同的逻辑可用于使用 FLOOR 函数向下舍入,如下所示:
FLOOR(value * 100) / 100 AS rounded_down;
<小时 />感谢@Mureinik的回答。