繁体   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