[英]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.