money
型別儲存具有固定小數精度的貨幣金額;請參閱表 8.3。小數精度由資料庫的 lc_monetary 設定決定。表中顯示的範圍假設有兩個小數位數。輸入接受多種格式,包括整數和浮點文字,以及典型的貨幣格式,例如 '$1,000.00'
。輸出通常採用後一種形式,但取決於區域設定。
表 8.3. 貨幣型別
名稱 | 儲存大小 | 描述 | 範圍 |
---|---|---|---|
money |
8 位元組 | 貨幣金額 | -92233720368547758.08 至 +92233720368547758.07 |
由於此資料型別的輸出是區域設定敏感的,因此將 money
資料載入到具有不同 lc_monetary
設定的資料庫中可能不起作用。為避免出現問題,在將轉儲恢復到新資料庫之前,請確保 lc_monetary
的值與轉儲時資料庫的值相同或等效。
numeric
、int
和 bigint
資料型別的值可以轉換為 money
。從 real
和 double precision
資料型別轉換可以透過先轉換為 numeric
來完成,例如
SELECT '12.34'::float8::numeric::money;
但是,不建議這樣做。由於潛在的舍入誤差,不應使用浮點數來處理貨幣。
可以將 money
值轉換為 numeric
而不丟失精度。轉換為其他型別可能會丟失精度,並且必須分兩步完成
SELECT '52093.89'::money::numeric::float8;
用整數值除以 money
值時,會進行截斷小數部分(向零取整)的操作。要獲得舍入結果,請除以浮點值,或先將 money
值轉換為 numeric
,然後再轉換回 money
。(後者更可取,以避免精度丟失的風險。)當 money
值除以另一個 money
值時,結果是 double precision
(即,一個純數字,不是貨幣);在除法中,貨幣單位會相互抵消。
如果您在文件中發現任何不正確的內容、與您對特定功能的實際體驗不符的內容或需要進一步說明的內容,請使用此表單來報告文件問題。