2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

8.2. 貨幣型別 #

money 型別儲存具有固定小數精度的貨幣金額;請參閱表 8.3。小數精度由資料庫的 lc_monetary 設定決定。表中顯示的範圍假設有兩個小數位數。輸入接受多種格式,包括整數和浮點文字,以及典型的貨幣格式,例如 '$1,000.00'。輸出通常採用後一種形式,但取決於區域設定。

表 8.3. 貨幣型別

名稱 儲存大小 描述 範圍
money 8 位元組 貨幣金額 -92233720368547758.08 至 +92233720368547758.07

由於此資料型別的輸出是區域設定敏感的,因此將 money 資料載入到具有不同 lc_monetary 設定的資料庫中可能不起作用。為避免出現問題,在將轉儲恢復到新資料庫之前,請確保 lc_monetary 的值與轉儲時資料庫的值相同或等效。

numericintbigint 資料型別的值可以轉換為 money。從 realdouble precision 資料型別轉換可以透過先轉換為 numeric 來完成,例如

SELECT '12.34'::float8::numeric::money;

但是,不建議這樣做。由於潛在的舍入誤差,不應使用浮點數來處理貨幣。

可以將 money 值轉換為 numeric 而不丟失精度。轉換為其他型別可能會丟失精度,並且必須分兩步完成

SELECT '52093.89'::money::numeric::float8;

用整數值除以 money 值時,會進行截斷小數部分(向零取整)的操作。要獲得舍入結果,請除以浮點值,或先將 money 值轉換為 numeric,然後再轉換回 money。(後者更可取,以避免精度丟失的風險。)當 money 值除以另一個 money 值時,結果是 double precision(即,一個純數字,不是貨幣);在除法中,貨幣單位會相互抵消。

提交更正

如果您在文件中發現任何不正確的內容、與您對特定功能的實際體驗不符的內容或需要進一步說明的內容,請使用此表單來報告文件問題。