请教大家,delphi中四舍五入到底怎么实现,什么原因总是结果不同。(100分)

  • 主题发起人 主题发起人 zhengsf
  • 开始时间 开始时间
Z

zhengsf

Unregistered / Unconfirmed
GUEST, unregistred user!
大家试试看以下两种方法:在formatfloat参数带计算公式与带变量结果不同。而若用
round函数碰到0.5时向偶整数靠拢。为什么会这样?

procedure TForm1.Button1Click(Sender: TObject);
var
temp :real;
begin
temp:=14.10*15*0.71;
showmessage(FormatFloat('0.00',temp));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
temp :real;
begin
temp:=14.10*15*0.71;
showmessage(FormatFloat('0.00',14.10*15*0.71));
end;
 
有没有搞错!这样会有问题。
 
相同呀! 都是 150.17.
 
当然不同!
在showmessage(FormatFloat('0.00',14.10*15*0.71));中,并没有把14.10*15*0.71转换成 real类型处理
而是转换成其它类型
 
补充一下,我是在Delphi5(未打补丁)中显示以下结果的:第一种是错误的结果150.16
第二种的方法是我想要的结果150.17。据我初步观察当要被截掉的那位小数是5时,
如该例中是150.165,delphi好像都有点问题。
 
那为什么showmessage(FormatFloat('0.00',14.10*15*0.71));却是显示正确的结果,必须把
14.10*15*0.71转换成什么类型呢?delphi中好像对于像real这种基本类型都是自动转换的吧。
 
我用的是delphi6,都是150.17,要不你可以多保留1位
showmessage(FormatFloat('0.00',14.10*15*0.71));

 
我也試了﹐在D6下都是150.17﹐沒有問題。
 
没问题呀。
 
会不会那一个编译器开关的设置不同呢,还是D5的问题?
 
我试过了,跟zhengsf说的一样,令我迷惑不解???我也好相知道为什么会是
这样。看来只好自己编写函数解决吧!
--------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
temp :real;
begin
temp:=14.10*15*0.71;
showmessage(FormatFloat('0.00',temp));
end;
--------执行结果 150.16

procedure TForm1.Button1Click(Sender: TObject);
var
temp :real;
begin
temp:=14.10*15*0.71;
showmessage(FormatFloat('0.00',14.10*15*0.71));
end;
--------------执行结果 150.17
>>round函数碰到0.5时向偶整数靠拢
-------------真的是这样,天啊?????
 
我刚才到同事的电脑上试了一下(我们装的是同一版本的Delphi无补丁),他那边却相等??
只有认为是我这边编译器的设置与他不同了,但我也不知道是那一个开关。

我是因为单位的程序前台计算经常会与数据库后台的查询差几分而发现这个问题,不过我
没想到竟然zhihuali会和我有一样的现象,真是奇怪!

 
我这没问题!
Formatfloat其实是利用Format格式化的一系列的参数将给定的字符串转换为浮点数。
难道和这有关系???
 
跟DELPHI 的补丁有关吗?我的是 DELPHI6.0 + 补丁。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
790
import
I
后退
顶部