Delphi下浮点运算的问题! 其实这不是浮点出错,而是浮点总是近似值,方法有1。用ROUND函数,2.用CURRENCY类型。3. 整数部分和小数部分用两个整数分别存储。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不好意思,我是浮点运算大师!Delphi中的帮助写的再明了不过了!主要是FloatToStr的问题,它是将浮点数以 general方式共15位数字表示出来的。要想正确的表示,用function FloatToStrF(Value: Extended; Format: TFloatFormat; Precision, Digits: Integer): string将程序段改为:procedure TForm1.Button1Click(Sender: TObject);var s1,s2:Extended;begin s1:=999999.99; s2:=999998.88; showmessage(FloatToStr(s1-s2)); showmessage(FloatToStrF(s1-s2,ffFixed,18,10));end;看看结果是否正确!能得到50分吧! to johnpei:你的方法的确可以解决,但还是有问题。我不能定死小数位的长度。那样很不好,如设的太长,会有很多0。如太短,则自动四舍五入。也不好。 不过还是要加分的! 其实你所发现的现象,我早就发现了,这当中还包括浮点运算的不确定性,我第一次把你的程序代码编译运行的结果是‘1 。11’,但第二次编译就不是了,这本身还和DELPHI编译器本身有关,对于你的计算,其实大多数情况,数据的范围都是可以估计的,因此,小数位数可以估计出来,是不是? 很高兴和你讨论这个问题! delphi 线程和VCL的问题? 2张表数据汇总的问题 我写了一个可以透明显示文本滚动的控件,但是不能放到picshow控件前面显示,请帮忙解决! 用delphi7下的indy组件写的发送mail出现:bad sequence of commands 高手请进来 再来接分吧 请大家推荐一款代理服务器软件吧。 如何给自编的控件增加触发事件?急 高分求助....关于ShellExecute()函数的使用?? B/S和C/S结构的结合使用设计的新思路[支持单机,局域网,互连网],欢迎大家测试Demo. 如何使窗体始终置于最前面,但他不是主窗体. 关于动态数组的使用疑问
Delphi中的帮助写的再明了不过了!
主要是FloatToStr的问题,它是将浮点数以 general方式共15位数字表示出来的。要想正确的表示,用function FloatToStrF(Value: Extended; Format: TFloatFormat; Precision, Digits: Integer): string
将程序段改为:
procedure TForm1.Button1Click(Sender: TObject);
var
s1,s2:Extended;
begin
s1:=999999.99;
s2:=999998.88;
showmessage(FloatToStr(s1-s2));
showmessage(FloatToStrF(s1-s2,ffFixed,18,10));
end;
看看结果是否正确!能得到50分吧!
你的方法的确可以解决,但还是有问题。我不能定死小数位的长度。那样很不好,如设的太长,会有很多0。如太短,则自动四舍五入。也不好。
不过还是要加分的!
很高兴和你讨论这个问题!