[英]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驅動程序希望它保持驅動程序的設置方式,並且如果您更改它,將會感到不高興。
通常,如果您想要一個人類可讀的格式化數字,則應該使用round
或to_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公開從float8
到text
,讓您extra_float_digits
在每次調用的基礎上指定extra_float_digits
。這通常更接近人們的實際需求。如果有時間,我應該補充一點……)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.