今天仔細看數值資料型態時,才仔細看到 postgresql 的數值型態其中一種為 numeric 的型態,中文翻譯為「任意精度數值」,一直間無法理解他的意思,後來才發現它可以讓用戶自行定義十進位的位數及小數點後面的位數。難怪科學運算都喜歡用 postgresql DB 來操作,一般生活中的應用實在太少運用到麼大的需求。
up to 131072 digits before the decimal point; up to 16383 digits after the decimal point
如果我解讀沒錯的話,在小數點前可以 131072 位數,在小數點後為 16383 位數。大概以後只有十兆換一塊的通膨才有可能有機會用到了(誤)。
例如:
數字 23.5141 的精度(precision)為 6 而比例(scale)為 4
宣告格式為:
NUMERIC(precision, scale)
NUMERIC(6, 4)
在 pgadmin 工具中的設定範例如下:
程式語言上運算的問題:
但其實宣告了這個欄位型態後,匯衍生出另一個問題。就是 DB 可以操作這個數字運算操作,但是程式語言有困難呀!!!找了一下,好像 PHP 的 BCMATH 好像可以解決任意精確度運算的這個問題,下次有遇到再來研究巴。
# 9.5 版的 DATA TYPE 描述 https://www.postgresql.org/docs/9.5/static/datatype-numeric.html
# 中文 8.0 版的 DATA TYPE http://twpug.net/docs/postgresql-doc-8.0-zh_TW/datatype.html#DATATYPE-NUMERIC-DECIMAL