2013-04-12 40 views
0

我正在使用postgresql。我的數據庫中的表格有REAL類型的列。當實數值超過七個零時,postgresql將其存儲爲例如1e + 007。通過查詢,值返回也爲1e + 007.但我需要的值爲10000000.解決方法是什麼格式化數據庫查詢返回的實際值

回答

0

如果使用浮點數的東西,他們不適合,包括在你所關心的幾乎任何東西你必須比更多的問題確切的數字介紹。

我建議您使用NUMERIC,它是一個基數爲10(十進制)的數字類型,可以控制精度和縮放比例。見Numeric typesNUMERIC執行計算較慢,並消耗更多的存儲空間,因此它並不總是正確的答案,但它是大量應用程序的理想選擇。

可以使用花車,它只是困難,因爲你不能安全地進行比較確切的平等,必須使用四捨五入和格式化功能顯示等

例子:

regress=> select '1.2'::float8 - '1.0'::float8; 
     ?column?  
---------------------- 
0.199999999999999956 
(1 row) 

regress=> select '1.2'::numeric - '1.0'::numeric; 
?column? 
---------- 
     0.2 
(1 row) 

像這些問題的另一個常見解決方案是使用應用程序定義的定點表示。如果您需要(比如說)保留2位小數,那麼您只需將數字2000.11作爲200011存儲在數據庫中,再乘以100.這是財務應用程序中的常用技術,儘管現在使用正確的小數數據類型更爲常見。

0

使用SQL CAST。在DB2中爲我工作

select cast(cast(1e+007 as real) as decimal (15,2)) from sysibm.sysdummy1; 
10000000.00 

您可以根據您期望的值(15,0)設置小數位數。

+1

如果你省略'sysdummy1'部分,它也應該在Postgres中工作。 –