所以我就來講解一下昨天的計算機我後來發現的BUG吧!!(趕工出來的東西...看來我還差的遠呢)
不知道認真的各位有沒有發現呢?
其實昨天的計算機
沒辦法算小數點、在特定情況時按下 = 時會刪除運算元!?
OK!首先小數點就請幫我建立一個新的按鍵事件
procedure TForm5.btn16Click(Sender: TObject);
begin
edt1.Text:=edt1.Text+'.';
然後改一下我們計算的公式
procedure TForm5.CalResult;
num1,num2:Double; //請幫我把型態從Int變成Double
begin
if (Pos('+',edt1.text)>0) then
if Pos('+',edt1.text)<>Length(edt1.Text) then
NumL.Delimiter:='+'
edt1.Text:=Copy(edt1.Text,1,Length(edt1.Text)-1);
if (Pos('-',edt1.text)>0) then
if Pos('-',edt1.text)<>Length(edt1.Text) then
NumL.Delimiter:='-'
edt1.Text:=Copy(edt1.Text,1,Length(edt1.Text)-1);
if (Pos('*',edt1.text)>0) then
if Pos('*',edt1.text)<>Length(edt1.Text) then
NumL.Delimiter:='*'
edt1.Text:=Copy(edt1.Text,1,Length(edt1.Text)-1);
if (Pos('/',edt1.text)>0) then
if Pos('/',edt1.text)<>Length(edt1.Text) then
NumL.Delimiter:='/'
edt1.Text:=Copy(edt1.Text,1,Length(edt1.Text)-1);
NumL.DelimitedText:=edt1.Text;
if (NumL.Count<2) then
Exit; //停止涵式
num1:=StrToFloat(NumL[0]); //改成StrToFloat
num2:=StrToFloat(NumL[1]); //改成StrToFloat
if (Pos('+',edt1.text)>0) then
edt1.Text:=FloatToStr(num1+num2); //改成StrToFloat
if (Pos('-',edt1.text)>0) then
edt1.Text:=FloatToStr(num1-num2); //改成StrToFloat
if (Pos('*',edt1.text)>0) then
edt1.Text:=FloatToStr(num1*num2); //改成StrToFloat
if (Pos('/',edt1.text)>0) then
begin
edt1.Text:=FloatToStr(num1/num2);
好現在大家一定有疑惑,為什麼不直接宣告成Float就好了呢!!?
delphi沒有float型態
不要問我為什麼,我也很疑惑!!
然後下面型態轉換還使用StrToFloat.....WTF
既然沒有那我們只好使用Double,可是卻沒有StrToDouble...
delphi你TM在耍人嗎!!!!
總之這樣就可以算有小數點的數值了!!
再來就是 = 按鍵事件
procedure TForm5.btn15Click(Sender: TObject);
i:Integer; //涵式需求
begin
CalCheck;
if NumC=1 then
begin
if TryStrToInt(Copy(edt1.Text,Length(edt1.Text),1),i) then //判斷最後一位是不是數值
CalResult;
TryStrToInt(字串,存值得變數)
Copy(字串,起始位置,取幾位)
這樣就可以避免在沒有第二數值時刪除運算元囉!!
再來還有一個很重要的事!!
除數不得為0,所以我們必須把她擋起來~
num1:=StrToFloat(NumL[0]); //改成StrToFloat
num2:=StrToFloat(NumL[1]); //改成StrToFloat
if (Pos('+',edt1.text)>0) then
edt1.Text:=FloatToStr(num1+num2); //改成StrToFloat
if (Pos('-',edt1.text)>0) then
edt1.Text:=FloatToStr(num1-num2); //改成StrToFloat
if (Pos('*',edt1.text)>0) then
edt1.Text:=FloatToStr(num1*num2); //改成StrToFloat
if (Pos('/',edt1.text)>0) then
begin
if num2<>0 then //數值2不等於0時
edt1.Text:=FloatToStr(num1/num2)
ShowMessage('除數不得為0'); //等於0時顯示訊息
然後你就會發現,挖 ~ / 越按越多(恩..bug就是這樣越來越多哈哈哈哈
//在算成績的位置
if (Pos('/',edt1.text)>0) then
begin
if num2<>0 then
edt1.Text:=FloatToStr(num1/num2)
begin
ShowMessage('除數不得為0');
edt1.Text:=FloatToStr(num1);
這樣就可以確定部會一值新增 / 了
今天就到這裡,有想到甚麼要補充的東西會再回來補充,
總之我會盡力維持PO文習慣,就算我不能連續30天,
那我們下次見囉!!~睡覺去~