我阅读了以下文档: 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
的范围。
答案 0 :(得分:3)
我喜欢当前的答案。我想补充一下,以证明为什么NUMERIC
是必要的:
SELECT
4.35 * 100 a_float
, CAST(4.35 AS NUMERIC) * 100 a_numeric
这不是错误-这正是IEEE defines floats的处理方式。同时NUMERIC
表现出的行为更接近人类的期望。
为进一步证明NUMERIC
有用,此答案说明NUMERIC
如何处理numbers too big for JavaScript to normally handle。
在将此问题归咎于BigQuery之前,您可以检查大多数其他编程语言是否会执行相同的操作。 Python,例如:
答案 1 :(得分:1)
主要区别是浮点数/双精度数是二进制浮点类型,数值将值存储为浮点小数点类型。因此,Numeric具有更高的精度,通常用于要求高度准确性的货币(金融)应用程序中。但是在性能方面,数字要比双精度和浮点型慢。数字可以100%准确地表示十进制格式精度内的任何数字,而浮点和双精度不能准确表示所有数字,即使是其各自格式精度内的数字。
答案 2 :(得分:1)
有很多区别:
范围:FLOAT
可以达到±2 ^ 1023(尽管它不能代表此范围内的每个整数)
接近零的精度:接近零,FLOAT
的精度可以达到2 ^ -1022。
NaN / Inf:FLOAT
具有“非数字”和正负的“无限”值,而NUMERIC
没有。
存储大小:每个NUMERIC
需要16个字节的存储空间,而FLOAT
仅需要8个字节的存储空间。
不可预测的性质:正如Ajay所暗示的那样,FLOAT
的最大缺点在于,它可以精确表示的数字与我们通常感兴趣的数字并不十分吻合。结果,浮点数应用于可接受某些误差的物理量。如果您需要可预测的,准确的人类可预测的结果,例如在财务计算中,请使用NUMERIC