繁体   English   中英

BigQuery 中的 NUMERIC 和 FLOAT 有什么区别?

[英]What is the difference between NUMERIC and FLOAT in BigQuery?

我阅读了文档: https : //cloud.google.com/bigquery/docs/reference/standard-sql/data-types https://cloud.google.com/bigquery/pricing#data

我知道FLOAT是 8 个字节而NUMERIC是 16 个字节 这是唯一的区别吗? 文档说NUMERIC范围可以是-99999999999999999999999999999.99999999999999999999999999999999999999.999999999的范围,但它没有指定FLOAT的范围。

我喜欢当前的答案。 我想添加这个来证明为什么NUMERIC是必要的:

SELECT 
  4.35 * 100 a_float
  , CAST(4.35 AS NUMERIC) * 100 a_numeric

在此处输入图片说明

这不是错误 - 这正是IEEE 定义浮点数应该被处理的方式。 与此同时, NUMERIC表现出的行为更接近人类的预期。

对于NUMERIC有用性的另一个证明,此答案显示了NUMERIC如何处理对于 JavaScript 而言无法正常处理的大数字

在将这个问题归咎于 BigQuery 之前,您可以检查大多数其他编程语言是否也会这样做。 以 Python 为例:

在此处输入图片说明

有很多不同之处:

  • 范围: FLOAT可以达到±2^1023(虽然它不能代表这个范围内的每一个整数)

  • 接近零的精度:接近零, FLOAT可以精确到 2^-1022。

  • NaN/Inf: FLOAT具有“非数字”和正负“无穷大”值,而NUMERIC则没有。

  • 存储大小:每个NUMERIC需要 16 个字节的存储空间,而FLOAT只需要 8 个字节。

  • 不可预测性:正如 Ajay 所暗示的, FLOAT的一大缺点是它可以精确表示的数字与我们通常感兴趣的数字并没有真正对齐。因此,浮点数应该用于物理量有些错误是可以接受的。 如果您需要可预测的、精确的人类可预测的结果,例如在财务计算中,请使用NUMERIC

主要区别在于 Floats / Doubles 是二进制浮点类型,而 Numeric 会将值存储为浮点小数点类型。 因此数字具有更高的精度,通常用于需要高度精度的货币(金融)应用程序中。 但在性能方面,Numeric 比 double 和 float 类型慢。Numeric 可以 100% 准确地表示十进制格式精度内的任何数字,而 Float 和 Double,不能准确表示所有数字,即使是在其各自格式精度内的数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM