是不是Delphi Bug?关于小数点问题?(100分)

  • 主题发起人 主题发起人 智利
  • 开始时间 开始时间

智利

Unregistered / Unconfirmed
GUEST, unregistred user!
有一函数:
Function TfrmWjrkd.CPC_Round_Str(Num:Real48{要取整的数};Digit:Integer{要取取到第几位小数}):string;
var strNum:String;//Num*(Digit+1)
DigitNum:Real;
i:Integer;
ss:string;
begin
DigitNum:=10;
if Digit<0 then
begin
MessageDlg('错误的Digit参数', mtconfirmation,[mbOk], 0);
Exit;
end;
if Digit=0 then
begin
CPC_Round_str:=FloatToStr(Num);
Exit;
end;
for i:=1 to Digit-1 do
begin
DigitNum:=DigitNum*10;
end;
if Num=Round(Num*DigitNum)/DigitNum then /这一句为什么不能相等?/
begin
ss:=FloatToStr((int(Num*(DigitNum)))/(DigitNum));
CPC_Round_Str:=ss;
Exit;
end;
问题就是:这一句为什么不能相等?Num=Round(Num*DigitNum)/DigitNum
设输入的数为2.34,取两位。
 
这么写试试
Num=Round(Num*DigitNum/DigitNum)
 

ss:=formatfloat('0.00'((int(Num*(DigitNum)))/(DigitNum)));
 
这是由浮点数的特点决定的, 你先用FormatFlaot('0.00', Double)得到一个你想要的精度
浮点数再进行比较。
 
多人接受答案了。
 

Similar threads

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