簡體   English   中英

普及型VAccess控件v雙重數據類型

[英]Pervasive VAccess control v double data type

希望有人能幫忙! 我們遇到了Pervasive VAccess控件的問題,該問題每次將“ double”類型的項目保存到Pervasive數據庫中時,保存的值就與我們想要的值不同...

例如,我們嘗試保存1.44 ,而實際上保存1.44004035454

稍有差異,但仍有所不同!

僅供參考,在DDF中定義的字段的十進制設置為0,我想知道是否有一種行動方法是將其設置為例如4? 但是以為我會看看是否有人可以在我們走這條路之前對此有所了解...

潛在的影響與普遍性無關,這是一個簡單的浮點問題 您會在使用單精度或雙精度浮點的任何系統中找到相同的結果,盡管某些系統會自動舍入以將其隱藏起來。

參見http://en.wikipedia.org/wiki/Floating_point

對於PostgreSQL及其派生類,可以設置extra_float_digits來控制此舍入。

regress=> SET extra_float_digits = 3;
SET
regress=> SELECT FLOAT8 '1.44';
       float8        
---------------------
 1.43999999999999995
(1 row)

regress=> SET extra_float_digits = 0;
SET
regress=> SELECT FLOAT8 '1.44';
 float8 
--------
   1.44
(1 row)

默認為0,但是您的客戶端驅動程序可能正在更改它。 如果您使用的是JDBC(我想您是這樣),那么請不要打擾此設置,JDBC驅動程序希望它保持驅動程序的設置方式,並且如果您更改它,將會感到不高興。

通常,如果您想要一個人類可讀的格式化數字,則應該使用roundto_char進行四舍五入,或者在客戶端進行。 請注意,由於此問題的答案中所述的原因round(double precision, integer)沒有round(double precision, integer)函數。 因此,您可能想要to_char ,例如。

regress=> SELECT to_char(FLOAT8 '1.44', 'MI999999999D99');
    to_char    
---------------
          1.44
(1 row)

(我希望PostgreSQL公開從float8text ,讓您extra_float_digits在每次調用的基礎上指定extra_float_digits 。這通常更接近人們的實際需求。如果有時間,我應該補充一點……)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM