我阅读了以下文档: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
Run Code Online (Sandbox Code Playgroud)
这不是错误-这正是IEEE定义浮点的方式。同时NUMERIC
表现出接近人类期望的行为。
为了进一步证明其NUMERIC
有用性,该答案显示了如何NUMERIC
处理数字,以使JavaScript无法正常处理。
在将此问题归咎于BigQuery之前,您可以检查大多数其他编程语言是否会执行相同的操作。Python,例如:
主要区别在于 Floats / Doubles 是二进制浮点类型,而 Numeric 会将值存储为浮点小数点类型。因此数字具有更高的精度,通常用于需要高度精度的货币(金融)应用程序中。但是在性能方面,Numeric 比 double 和 float 类型慢。Numeric 可以 100% 准确地表示十进制格式精度内的任何数字,而 Float 和 Double 不能准确表示所有数字,即使是在其各自格式精度内的数字。
有很多区别:
范围:FLOAT
可以达到±2 ^ 1023(尽管不能代表此范围内的每个整数)
接近零的精度:接近零,FLOAT
可以精确到2 ^ -1022。
NaN / Inf:FLOAT
具有“非数字”和正负“无限”值,而NUMERIC
没有。
存储大小:每个都NUMERIC
需要16个字节的存储空间,但FLOAT
只需要8个字节。
不可预测的性质:正如Ajay所暗示的那样,最大的缺点FLOAT
是它可以精确表示的数字与我们通常感兴趣的数字并没有真正地对齐。因此,应将浮点数用于物理量,其中可以接受一些错误。如果您需要可预测的,精确的人类可预测的结果(例如财务计算中的结果),请使用NUMERIC
归档时间: |
|
查看次数: |
2564 次 |
最近记录: |