線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1481
推到 Plurk!
推到 Facebook!

stringgrid栏位输入调整为money型数据(含三个小问题)

答題得分者是:HM
baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-20 20:19:23 IP:219.140.xxx.xxx 未訂閱
stringgrid1.cells[2,i]中数据需要写入sql server数据库且为money 1.如何实现USER在stringgrid1.cells[2,i]输入字母或非money型时 将其强制转换为0显示? 不知在StringGrid1MouseDown中如何写 2.在stringgrid1.cells[2,i]输入的数据 如何隔三位就加上逗号分割? 3.小数点后如何保留小数点后两位和 小数点后第两位 根据USER在小数点后输入的第三位四舍五入? 發表人 - baby2321 於 2005/11/20 20:21:10
baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-22 06:50:40 IP:219.140.xxx.xxx 未訂閱
对于四舍五入 不知道是不是与 Trunc(stringgrid[2,i] * 100 0.5) / 100; 这一句有关 但具体应如何写呢?
baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-22 07:10:03 IP:219.140.xxx.xxx 未訂閱
看到有朋友这样写 double d = 1234567.01; DecimalFormat df = new DecimalFormat("#,###,###.##"); String str1 = df.format(d); System.out.println(str1); 但不知这和stringgrid[2,i]的输入确认结合起来 不知道是不是在下发错了区域 这个问题连点击的朋友都比较少 现将问题结案 转至数据库区 望版主 站长见谅 發表人 - baby2321 於 2005/11/22 16:51:40
HM
初階會員


發表:21
回覆:32
積分:25
註冊:2004-11-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-12-06 11:31:58 IP:220.130.xxx.xxx 未訂閱
我是寫在Grid的keydown裡,利用Try Except 來簡單的判斷輸入值是否為數值,非數值的值就在Except裡填上0;紅色那一行,就是user按下enter之後,自動加上comman,而且小數點第二位以後四捨五入到第二位    
  
  If key = 13 Then
   Begin
    If StringGrid1.Col = 0 Then
     Begin
      Try
        StrToFloat(StringGrid1.Cells[0,StringGrid1.Row]);
      Except
        StringGrid1.Cells[0,StringGrid1.Row] := '0';
      End;
      StringGrid1.Cells[0,StringGrid1.Row] := Formatfloat('#,##0.00',StrToFloat(StringGrid1.Cells[0,StringGrid1.Row]));
     End;
   End;
 
發表人 - HM 於 2005/12/06 11:48:29
baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-07-26 12:06:39 IP:211.161.xxx.xxx 未訂閱

谢谢HM的回复

你上面的代码可以实现 在小数点两位后四舍五入 但仍有两点未能实现

1.输入字母 提示:"a" is not a valid floating point value.

2.如果输入的数字 过千位 如1000 也会出现 错误提示 :"1,000.00" is not a valid floating point value.

baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-07-26 17:11:20 IP:211.161.xxx.xxx 未訂閱

TO:HM

THANKS! 你的方法可以实现 隔三位就加上逗号分割 和 小数点后输入的第三位四舍五入

之所以出现valid floating point value的错误

是因为我把StringGrid1.Cells[0,StringGrid1.Row] 做了数据加总 代码如下:

procedure TInput.Sum;

var
sum:double;
i:integer;

begin
sum:=0;

for i:=1 to 100 do

if stringgrid1.Cells[0,i]<>'' then

begin

sum:=sum strtofloat(stringgrid1.Cells[0,i]);//其实这里的stringgrid1.Cells[0,i]已经是Float型了 我想应该是在Formatfloat产生 隔三位就加上逗号分割的逗号 造成了加总出现问题

//因为千位以内 即不产生 隔三位就加上逗号分割的逗号 计算加总的时候就没有问题 而一旦产生这个逗号 就出现了加总方面的问题 含有逗号在其中是无法加总的 故而出现提示的错误 我想是不是这样??指指正

end;

dbedit1.Text:=floattostr(sum);

dbedit1.Update;

end;

baby2321
初階會員


發表:52
回覆:165
積分:48
註冊:2005-06-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-07-26 18:28:48 IP:211.161.xxx.xxx 未訂閱

应该是逗号的问题

stringgrid1.Cells[0,StringGrid1.Row]:=StringReplace('stringgrid1.Cells[0,StringGrid1.Row]', ',', '', [rfReplaceAll]);

我想通过StringReplace来处理 以上代码通过了 但应用时有问题

感觉以上代码是有点问题 这里是不是自己的代码写错了?

系統時間:2024-05-10 14:37:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!