BigQuery - ROUND、TRUNC 函数问题

Boh*_*hoi 1 google-bigquery

我对 BigQuery 标准查询中的 round, trunc 函数有疑问。

在此输入图像描述

我预计为 3953.7、3053.67、3053.667。f1_、f2_结果不同。这是一个错误??

在此输入图像描述

我预计为 3.195、3.195、3.1955、3.1965、3.1945。f1_、f3_结果不同。是我的错吗?

mus*_*cat 5

ROUND ()用于将数字字段四舍五入到指定的最接近的小数位数。浮点值有限制。它们只能表示二进制值,而不能精确表示小数点后的十进制数字(参见此处)。

如果SELECT ROUND(3053.665,2)您收到:3053.66,您可以使用: 来克服它ROUND(value + 0.005, 2),它允许您接收3053.67

无论如何,如果你想关心精确的小数结果,你应该使用NUMERIC 类型。以下查询给出了您期望的结果:

SELECT ROUND(3953.65,1), ROUND(numeric '3053.665',2), ROUND(numeric '3053.6665',3)
Run Code Online (Sandbox Code Playgroud)

TRUNC(),以下查询给出您期望的结果:

SELECT TRUNC(3.1955,3), TRUNC(numeric'3.195',3), TRUNC(3.1955,4), TRUNC(numeric '3.1965',4), TRUNC(3.1945,4)
Run Code Online (Sandbox Code Playgroud)

BigQuery 默认将小数解析为浮点以获得更好的性能,而其他数据库默认将小数解析为 NUMERIC。这意味着其他数据库将以TRUNC(3.03,2)BigQuery 的相同方式进行解释TRUNC(numeric '3.03',2)

我希望它能帮助你。