簡體   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