关于Single的问题 ( 积分: 200 )

  • 主题发起人 主题发起人 delphilww
  • 开始时间 开始时间
D

delphilww

Unregistered / Unconfirmed
GUEST, unregistred user!
在VB中定义一个Single数据类型,实现如下:
Dim s Single
s=110.123456789
prj.ua=s //prj.ua是一硬件设备做的通讯控件,也就是上面所提到的调用
// ActiveX的控件,表示设置的输出电压,其中ua是VB中的Single类型
这里传递给Prj.ua的数值为:110.1235(七个有效数字),控件会将这些数值转换成十六进制进行传递
翻译成Delphi语句如下:
var
Prj:variant;
vs:single;
begin
Prj:=CreateOleObject( 'Prj_CL301V2.CL301V2');
vs:=110.01
Prj.ua:=vs //这里发现传递给ua的值变的很奇怪了,成了110.010000000124
end;
因为传递给ua的数值不清楚了,所以硬件仪器肯定不能接受这个正确数值,事实也是这样,仪器的输出变的非常杂乱,不能得到控制的效果,我该如何解决?????
 
在VB中定义一个Single数据类型,实现如下:
Dim s Single
s=110.123456789
prj.ua=s //prj.ua是一硬件设备做的通讯控件,也就是上面所提到的调用
// ActiveX的控件,表示设置的输出电压,其中ua是VB中的Single类型
这里传递给Prj.ua的数值为:110.1235(七个有效数字),控件会将这些数值转换成十六进制进行传递
翻译成Delphi语句如下:
var
Prj:variant;
vs:single;
begin
Prj:=CreateOleObject( 'Prj_CL301V2.CL301V2');
vs:=110.01
Prj.ua:=vs //这里发现传递给ua的值变的很奇怪了,成了110.010000000124
end;
因为传递给ua的数值不清楚了,所以硬件仪器肯定不能接受这个正确数值,事实也是这样,仪器的输出变的非常杂乱,不能得到控制的效果,我该如何解决?????
 
format一下
 
比如FormatFloat('#,###',vs);
 
浮点型就是这样。
你可以定义成 vs: Currency
 
一般浮点型的比较都是用差的 绝对值看是否小于一个很小的数
If Abs(A-B) < 0.000001 Then A=B;
 
按照IEEE标准,浮点型都存在精度问题,具体你不妨参考如下:
http://blog.csdn.net/dawnsong/articles/299757.aspx
 
后退
顶部