一个小数位数问题(10分)

  • 主题发起人 主题发起人 晨空
  • 开始时间 开始时间

晨空

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个变量i,
一个edit里可以输入一实数,在显示时实数的小数位数为i,
也就是说,如果edit里值是3.25684 那么,如果i=2时,在edit里就显示3.26
当i=3时,显示3.257.
问如何实现这功能,代码如何写
 
你看看format函数
 
n:=strtofloat(edit.text)*power(10,i);
n:=round(n)/power(10,i);
 
formatfloat()
自己判断是几位就显示几位的精度,
如为2 为,则为formatfloat('0.00',3.2333333);
3呢则多添一个0 变成'0.000'就行了,查一下帮助就行了
 
你的逻辑有问题。
只显示 i 位时, 第 i+1 位小数如何输入???????

取其结果还差不多。
 
不知道是不是符合要求,其他控制编辑筐的条件自己写,好了
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
i:integer;
s:string;
begin
if key=#13 then
begin
i:=2;
s:=copy(floattostr(frac(strtofloat(edit1.text))),3,i);
if strtoint(copy(floattostr(frac(strtofloat(edit1.text))),i+2,1))>=5 then
s:=floattostr(strtofloat(s)+1);
edit1.Text :=floattostr(int(strtofloat(edit1.text)))+'.'+s;
end;
end;
 
直接用maskedit,设计它的mask为只支持两位小数,不用自己检查了。
 
strtofloat(edit1.text)
*10的i次方
然后取round()
再除以10的i次方

烦一点, 应该可以
 
procedure TForm1.Edit1Exit(Sender: TObject);
begin
edit1.Text:=format('%8.2f',[strtofloat(edit1.text)]);
end;

测试通过!
 
后退
顶部