我在取三位小数的时候遇到这样的问题,
程序过程是这样的:
比如在edit1中输入数据然后在edit2中显示取三位小数的结果,在uses中添加math单元。
procedure TForm1.Edit1Change(Sender: TObject);
var a:string;
b,c:real;
begin
a:=edit1.Text;
b:=strtofloat(a);
c:=roundto(b,-3);
edit2.Text:=floattostr(c);
end;
我在测试过程中处理几乎全部正确,唯独两个数字不能解决:0.0255,0.0355。
我问过许多人都不知道其中原因,请高手指点。有没有其它方法可以解决这种象限除了单独限制。
程序过程是这样的:
比如在edit1中输入数据然后在edit2中显示取三位小数的结果,在uses中添加math单元。
procedure TForm1.Edit1Change(Sender: TObject);
var a:string;
b,c:real;
begin
a:=edit1.Text;
b:=strtofloat(a);
c:=roundto(b,-3);
edit2.Text:=floattostr(c);
end;
我在测试过程中处理几乎全部正确,唯独两个数字不能解决:0.0255,0.0355。
我问过许多人都不知道其中原因,请高手指点。有没有其它方法可以解决这种象限除了单独限制。
解决方案 »
- delphi6用ado连接数据库的奇怪问题
- 在delphi里引用C++的类的问题(高分求解!!!!)
- >>贡献给大家一个类,进来看看吧<<
- *.jsp的文件是用什么来打开的``` 感谢了!
- 把TXT文件导入数据库
- DELPHI技术手册很好?谁有它的资料
- 我在类型库中定义了几个接口,在每个接口下面定义了一些方法,但是客户端只能调用缺省的接口方法,而其它的就不行了,报告说接口没有定义
- 谁有intraweb的中文资料?
- 用WebBrowser怎样判断是否连接上了Internet
- 高分请教:如何实现可移动的面板?
- 多重筛选问题???
- 如何在一个MTS/COM+执行环境中建立其它的MTS/COM+组件?
var a:string;
b,c:real;
begin
a:=edit1.Text;
b:=strtofloat(a);
SetRoundMode(rmUp); <---加一句
c:=roundto(b,-3);
edit2.Text:=floattostr(c);
end;
Var
tmp_str : string;
I,PosI : Integer;
begin
inherited;
If Not (Key In ['0'..'9',#8,#13,#46]) then
begin
Key := #0;
MessageBeep(0);
end;
I := Pos('.',E_fcjg.Text);
If I > 0 then
begin
If Not (Key In ['0'..'9',#8,#13]) then
begin
Key := #0;
MessageBeep(0);
end;
PosI := E_fcjg.SelStart;
If PosI < I then //光标在'.'前面
begin
If Not ( Key In ['0'..'9',#8,#13]) then
begin
Key := #0;
MessageBeep(0);
end;
end
else //光标在'.'后面
begin
tmp_str := Trim(Copy(E_fcjg.Text,I,3));
If Length(tmp_str) + 1 > 3 then
begin
If Not ( Key In [#8]) then
key := #0;
end
else
begin
If Not ( Key In ['0'..'9',#8,#13]) then
begin
Key := #0;
MessageBeep(0);
end;
end;
end;
end;
end;end.
//我处理输入价格时候的壹段代码处理了2个小数位
to:coreblood(菜码....) 太长了,看不懂:))))
to:azsoft(Try my best) 我还没理解你的意思,还在深刻体会。
还有,之后用了0.0005之类的还是通过不了,望大家指点,为什么会出现这种现象。
急用!!!!!!!!!!!!!!!!!
具体参数可以查一下 Delphi 的帮助。'%12.3f'是一个格式,12位宽,小数点后保留3位的实数。[]中是要转换的数值。最好看帮助中的示例。
begin
Edit2.Text := FloatToStr(Trunc(StrToFloat(Edit1.Text) * 1000 + 0.5) / 1000);
end;
的方法如果用户粘贴怎么办。
只不过delphi中采用的四舍五入方法为财务中的四舍五入方法!也就是说下一位如果刚好是5不进位!0.02551,0.035501都可以让它进位显示的!
如果你非要按照数学中的四舍五入方法,简单处理方法如下:
Value*100+0.5
Trunc(Value)
Value / 100
Trunc(Value)
Value / 100
用到我的过程中测试通过了,感谢大家。
我怎么给你们分分,你们太热情了。
如果是上面说的,那么0.0255,0.0355可以不进位,为何0.0455进位了