delphi 单精度浮点数计算程序
作者&投稿:赤诗 (若有异议请与网页底部的电邮联系)
为什么控制?
在显示的时候,用控件去定义显示格式就可以了……
double 8个字节,float 4个字节,精度不一样.占字节数不同, float->double 可行 其逆将会丢失精度
这个是IEEE754 转换的吧., 给你个代码.
function IEEE754DToF(const AData: DWORD): Single;
var
S, M, E: Integer;
// i: Integer;
begin
try
S:= (AData and $80000000) shr 31;
E:= (AData and $7F800000) shr 23;
M:= AData and $7FFFFF;
Result:= Power(-1, S) * (1 + M/$7FFFFF) * Power(2, E-127);
except
Result:=0;
end;
end;
var
buf : array[0..1] of word; //unsignle 16bit int
begin
buf[0] := $0000;
buf[1] := $4260;
ShowMessage( FloatToStr( PSingle(@buf[0])^));
end;
Edit2.Text :=IntToStr(StrToInt64(('$'+edit1.text)));
郜新胃复: DELPHI的浮点数声明不是用float,而是用real(8个字节),single(8个字节,单精度浮点),double(16个字节,双精度浮点) 浮点数据声明如下: var i,j,k:real;m,n:integer;integer 转化为float是自动进行的.当把一个integer值赋给浮点型的变量时,DELPHI自动进行类型转换.
桂平市17262019903: Delphi Float 转Integer - ?
郜新胃复: Trunc();Round();
桂平市17262019903: 如何在delphi中实现用IEEE754(4字节二进制浮点数格式)规约电表的数据显示 - ?
郜新胃复: 字节数组转浮点?用指针或联合结构都可以 //单精度浮点数(4字节) TSingleRec = record case Integer of 0:(Value:Single); 1:(bLL,bLH,bHL,bHH:Byte); end;或var bArray : array [0..3] of byte; aFloat : Single;begin bArray[0] := .. bArray[1] := .. ... aFloat := PSingle(@bArray)^;end;注意高低位顺序,电脑中的字节顺序是低到高
桂平市17262019903: Delphi 单精度类型 Acess - ?
郜新胃复: 浮点的存储本身是有误差的.这个没办法.为了保证效果,你可以不存储浮点数,而存储 转化后的字符串.uses部分,加上 Math 这个单元.RoundTo返回的是Extended类型 可以使用 aa:=roundto(aa,-2); //中间的是逗号 举例:RoundTo(1234567, 3) 1235000 RoundTo(1.234, -2) 1.23 RoundTo(1.235, -2) 1.24 RoundTo(1.245, -2) 1.24 ------------- 不管外面怎么写,读进来都是浮点数.浮点数是不能准确地保存的.至于显示格式,可以使用roundto(3.55,-2) 出来就是2位小数
桂平市17262019903: delphi语言编程:π/4=1 - 1/3+1/5 - 1/7+…,请计算π的近似值 直到精确度10e - 6位置 - ?
郜新胃复: 用迭代的方式不断逼近,直到前后两次计算值差满足要求 procedure TForm1.Button1Click(Sender: TObject); const e=1.0E-6;//精度 maxn=10000000;//计算次数上限 var n,k:longint; ans1,ans2:extended; begin ans1:=0;ans2:=0;n:=-1;k:=-1; ...
桂平市17262019903: 关于DELPHI中操作ACCESS2000数据库中单精度数据的问题??
郜新胃复: 我也遇到过同样的问题,其实还是数据库的问题,你把Total的字段大小设为:小数 格式:固定 数值范围:2 小数位数:2显示就会是0.00了,试试吧!:)
桂平市17262019903: 求助一个很简单的DELPHI计算小程序 - ?
郜新胃复: qry为一查询表.1.读到c qry.sql.text:='select c from BH.mdb where id=:id'; //假设与字段id对应,读c qry.Parameters.ParamByName('pym').Value:=d; qry.open; c:=qry.fieldbyname('c').asinteger;2.这样就可以利用公式了d=a+c*b.这是一个结果.如果数据库中的多条记录要输出一行一行的.也不难啊.可以用form的canvas属性在上面写.如果要好写一点.用一上listbox或memo一行一行的写.也行.
桂平市17262019903: 请问delphi 怎么计算实数的精度,让下面的代码正确了,谢谢 - ?
郜新胃复: 这其实是个老话题,这个不只是delphi的问题,所有计算机语言,都存在类似的问题,这个与计算机CPU的原理有关系,看来你没完全理解浮点的意思.也就是说,所有浮点,都不是精确值.换句话说,这个3*0.1在我们的数学上来看,确实是0.3,然后两个0.3相减就该等于0.但是在大学的数学里有说过,所有浮点,都是近似值.你不能用我们的数学去理解CPU里面的3*0.1,它得到的只能是个近似值.前面那个je去减这个近似值,得到的只能是个无限接近0的数,而不是0.当精确度越高时,越接近0.如果你对精确度的要求高,就不要用real了,比如用Extended,这个结果就是0了.
桂平市17262019903: IEEE754标准的单精度浮点数怎么计算 - ?
郜新胃复: 手工计算方法不了解,用计算机的话可以这么做. float a; a = 1; for(i = 0; i < 15; i++) a = a / 10;DWORD* p; p = (DWORD*)&a fprintf("%x", *p)
桂平市17262019903: 用delphi写计算器计算并显示结果时遇到这样的程序,如下,拜谢大神指点 - ?
郜新胃复: ...num2 := StrToFloatDef(Edit1.Text, 0.00); //将Edit1输入的数转化为浮点型 case Flag1 of //Flag1 应该是全局变量,保存运算符号的 1: result := num1 + num2; //加法 2: result := num1 - num2; //减法 3: result :=num1 * num2; //乘法 前面3,要看你按运算符时,给Flag1的赋值操作 4: result :=num1 / num 2; //除法 同乘法 Edit1.Text := FloatToStr(result); //答案显示到Edit1..