一个奇怪的StrToFloat()函数

一个字符串的值为'999950.64',而显示出来的只有'999950.63',开始还以为是用引用传递参数使用错误,经跟踪发现,是因为定义的一个变量用了不当的类型引起的,也是因为对Single和Extended没有好好认识他们的不同,

 

var

  s:Single;

  e:Extended;

begin

  Edit1.Text:='0.64';

  s:=StrToFloat(Edit1.Text);

  e:=StrToFloat(Edit1.Text);

end;

 

这时s,和e的值是不一样的,s是值为0.6399999,e的值为0.64;而如果Edit1.Text:='999950.64';则s为999950.625,e为999950.64,因为Single的精底为7-8位,所在在存储'999950.64'时,只能存'999950.6'后面的是有误差的,所以要是要求精确的小数时,最好使用Extended.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
unit Contect; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Mask, RzEdit, ExtCtrls, RzPanel, RzButton; type TForm1 = class(TForm) RzGroupBox1: TRzGroupBox; SIZE1: TRzEdit; Label1: TLabel; SIZE2: TRzEdit; Label2: TLabel; Money: TLabel; Label3: TLabel; DanJia: TRzEdit; Label4: TLabel; Number: TLabel; RzEdit1: TRzEdit; Label5: TLabel; SIZE3: TRzEdit; RzBitBtn1: TRzBitBtn; RzBitBtn2: TRzBitBtn; RzBitBtn3: TRzBitBtn; RzBitBtn4: TRzBitBtn; procedure SIZE1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure SIZE2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure RzGroupBox1Click(Sender: TObject); procedure DanJiaKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure SIZE3KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure RzBitBtn1Click(Sender: TObject); procedure RzBitBtn2Click(Sender: TObject); procedure RzBitBtn3KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure RzBitBtn1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure RzEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure RzBitBtn3Click(Sender: TObject); procedure RzBitBtn4Click(Sender: TObject); procedure RzBitBtn4KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.SIZE1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key=13 then SIZE3.SetFocus; end; procedure TForm1.SIZE2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key=13 then RzBitBtn3.SetFocus; end; procedure TForm1.RzGroupBox1Click(Sender: TObject); begin DanJia.SetFocus; end; procedure TForm1.DanJiaKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key=13 then RzBitBtn4.SetFocus; end; procedure TForm1.SIZE3KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key=13 then SIZE2.SetFocus; end; procedure TForm1.RzBitBtn1Click(Sender: TObject); begin SIZE1.Text:='0'; SIZE2.Text:='1'; SIZE3.Text:='0'; NUMBER.Caption:='0'; RzEdit1.Text:='0'; DanJia.Text:='0'; SIZE1.SetFocus; end; procedure TForm1.RzBitBtn2Click(Sender: TObject); begin Close; end; procedure TForm1.RzBitBtn3KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin SIZE1.SetFocus; Number.Caption:=floattostr( Strtofloat(SIZE1.Text) * Strtofloat(SIZE2.Text) * Strtofloat(SIZE3.Text) ); RzEdit1.Text:=floattostr(strtofloat(RzEdit1.Text)+Strtofloat(Number.Caption)); end; procedure TForm1.RzBitBtn1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key=13 then SIZE1.SetFocus; end; procedure TForm1.RzEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key=13 then DanJia.SetFocus; end; procedure TForm1.RzBitBtn3Click(Sender: TObject); begin SIZE1.SetFocus; Number.Caption:=floattostr( Strtofloat(SIZE1.Text) * Strtofloat(SIZE2.Text) * Strtofloat(SIZE3.Text) ); RzEdit1.Text:=floattostr(strtofloat(RzEdit1.Text)+Strtofloat(Number.Caption)); end; procedure TForm1.RzBitBtn4Click(Sender: TObject); begin RzBitBtn1.SetFocus; Money.Caption:=floattostr( Strtofloat(RzEdit1.Text) * Strtofloat(DanJia.Text) ); end; procedure TForm1.RzBitBtn4KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin RzBitBtn1.SetFocus; Money.Caption:=floattostr( Strtofloat(RzEdit1.Text) * Strtofloat(DanJia.Text) ); end; end.
以下是一个简单的 Delphi 计算器程序,可以实现基本的加、减、乘、除操作: ``` unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var a, b, c: Double; begin a := StrToFloat(Edit1.Text); b := StrToFloat(Edit2.Text); c := a + b; Label1.Caption := FloatToStr(c); end; procedure TForm1.Button2Click(Sender: TObject); var a, b, c: Double; begin a := StrToFloat(Edit1.Text); b := StrToFloat(Edit2.Text); c := a - b; Label1.Caption := FloatToStr(c); end; procedure TForm1.Button3Click(Sender: TObject); var a, b, c: Double; begin a := StrToFloat(Edit1.Text); b := StrToFloat(Edit2.Text); c := a * b; Label1.Caption := FloatToStr(c); end; procedure TForm1.Button4Click(Sender: TObject); var a, b, c: Double; begin a := StrToFloat(Edit1.Text); b := StrToFloat(Edit2.Text); if b = 0 then ShowMessage('除数不能为0') else begin c := a / b; Label1.Caption := FloatToStr(c); end; end; end. ``` 该程序包含两个文本框(Edit1 和 Edit2)和四个按钮(Button1、Button2、Button3 和 Button4),分别对应加、减、乘、除操作。当用户输入两个数字后,按下相应的按钮,程序将计算结果并在标签(Label1)中显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值