[英]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.999999999
到99999999999999999999999999999.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.