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

时间:2019-02-20 15:12:14

标签: google-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的范围。

3 个答案:

答案 0 :(得分:3)

我喜欢当前的答案。我想补充一下,以证明为什么NUMERIC是必要的:

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

enter image description here

这不是错误-这正是IEEE defines floats的处理方式。同时NUMERIC表现出的行为更接近人类的期望。

为进一步证明NUMERIC有用,此答案说明NUMERIC如何处理numbers too big for JavaScript to normally handle

在将此问题归咎于BigQuery之前,您可以检查大多数其他编程语言是否会执行相同的操作。 Python,例如:

enter image description here

答案 1 :(得分:1)

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

答案 2 :(得分:1)

有很多区别:

  • 范围:FLOAT可以达到±2 ^ 1023(尽管它不能代表此范围内的每个整数)

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

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

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

  • 不可预测的性质:正如Ajay所暗示的那样,FLOAT的最大缺点在于,它可以精确表示的数字与我们通常感兴趣的数字并不十分吻合。结果,浮点数应用于可接受某些误差的物理量。如果您需要可预测的,准确的人类可预测的结果,例如在财务计算中,请使用NUMERIC