VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: rosbicn

关于精度简单而又奇怪的问题!!!大家帮忙!

[复制链接]

1

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-7-28 17:15:01 | 显示全部楼层
如何实现s始终显示8.07000000000000028??????
回复

使用道具 举报

0

主题

34

帖子

21.00

积分

新手上路

Rank: 1

积分
21.00
发表于 2020-7-28 18:15:01 | 显示全部楼层
我的知识不够专业,因此只能说估计:

我估计是因为你的#的个数超出了实数的精度范围而致。其实,我估计,8.07显示为8.000000000000028这样,本身就是一个错误。请看一下我在上面的回复。正确的结果应该是显示为8.07或8.070000000000000这样

然后你再按我的代码,把var a : double;换成var a : Extended;试试,是不是可以加很多的#

回复

使用道具 举报

1

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-7-28 22:00:01 | 显示全部楼层
谢谢面面爱面面 ,可是如果我希望
var
  a:double;
  s:string;
  vADOConnection:Variant;
begin
  a := 8.07;
  s := formatfloat('#.################',a);//s显示8.07000000000000028
  vADOConnection := CreateOleObject('ADODB.Connection');
  vADOConnection.ConnectionString := 'Driver={Firebird/InterBase(r) driver};pwd=masterkey;Uid=SYSDBA;database=C:\123.GDB';
  try
    vADOConnection.Open;
  Except
  end;
  a := 8.07;
  s := formatfloat('#.################',a);//s显示8.07
end;

显示8.07的地方也显示8.07000000000000028,意思就是即使错也错的一样!

我个人理解,vADOConnection.Open调用了MS的库文件,所以有效位数之后的数字直接删除了。有什么好方法来不删除呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表