我很笨,所发我遇到的问题也笨!!!
下面的代码很简单,就是每按一下BUTTON2就往DBGRID1里加入一条记录,但是问题来了,
新增加的记录中,第2个字段可正确显示为“123.45”,但每按一次增加一个记录,原记录就会变为
123.499969.....,也就是浮点数变为带了好多位小数。
如 datetime f1
........ 123.49969....
........ 123.49969....
........ 123.45
总之,只有最新的记录才不会变,有没有办法让它不变呀?
void __fastcall TForm1::Button2Click(TObject *Sender)
{
DBGrid1->DataSource->DataSet->Append();
DBGrid1->Columns->Items[0]->Field->AsDateTime=Now();
DBGrid1->Columns->Items[1]->Field->AsFloat=123.45;
}
问题点数:20、回复次数:20Top
1 楼lurel(城市陌生人)回复于 2006-03-05 18:30:26 得分 5
呵呵,经常遇到的问题,教你一个方法,
看一下你连接数据库的控件BDE是DataBase1
注意一下,这里有一个属性需要设定一下.
例如:BDE的DataBase1看一下Params里面有一个ENABLE BCD=FALSE,请把它改成TRUE,就OK了.
Top
2 楼0delphi(睡个舒服觉)回复于 2006-03-05 18:39:36 得分 0
用字符串 替换 浮点数就行了Top
3 楼jone7319(舍我其谁)回复于 2006-03-05 19:46:42 得分 0
>>呵呵,经常遇到的问题,教你一个方法,
看一下你连接数据库的控件BDE是DataBase1
我用ADOQuery查询
连接数据库用
ADOQuery1->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\test\\test.lmdb;Persist Security Info=False";
好象没用到DataBase1
Top
4 楼jone7319(舍我其谁)回复于 2006-03-06 17:30:16 得分 0
老妖来过没有?帮我看一下如何解决啊!Top
5 楼lurel(城市陌生人)回复于 2006-03-06 17:41:28 得分 5
ADOQuery1的EnableBCD置成TRUETop
6 楼jone7319(舍我其谁)回复于 2006-03-07 11:20:36 得分 0
设过了没用,还是老样子啊!Top
7 楼online30()回复于 2006-03-07 13:39:22 得分 0
格式化输入:sprintf(s,"%8.2f",f1);Top
8 楼xjq2003(xjq2003)回复于 2006-03-07 17:26:25 得分 0
void __fastcall TForm1::ADOTable1CalcFields(TDataSet *DataSet)
{
//添加格式化的语句就可以了
}Top
9 楼kwokwinglau(每天前进1%)回复于 2006-03-07 18:48:48 得分 5
设置属性: DBGrid1->Columns->Items[1]->DisplayFormat="0.00";
Top
10 楼kwokwinglau(每天前进1%)回复于 2006-03-07 18:52:18 得分 0
以上可以在DBGrid的Columns[1]的DisplayFormat里面直接打上:"0.00".
另外一种有效的方法:DBGrid1->Columns->Items[1]->Field->AsFloat=FormatFloat("0.00",123.45);Top
11 楼Hercules1947(南船)回复于 2006-03-09 14:07:21 得分 0
改成DBGrid1->Columns->Items[1]->Field->AsString=123.45;
还有以后注意定义时不要用单精度float用双精度doubleTop
12 楼Hercules1947(南船)回复于 2006-03-09 14:08:43 得分 0
最好转换一下DBGrid1->Columns->Items[1]->Field->AsFloat=FloatToStr(123.45);Top
13 楼Hercules1947(南船)回复于 2006-03-09 14:09:10 得分 0
最好转换一下DBGrid1->Columns->Items[1]->Field->AsString=FloatToStr(123.45);
Top
14 楼jone7319(舍我其谁)回复于 2006-03-10 10:47:43 得分 0
to kwokwinglau(每天前进一点):
DBGrid1->Columns->Items[1]->DisplayFormat="0.00";
DBGrid1->Columns->Items[1]没有DisplayFormat这个属性!!!
DBGrid1->Columns->Items[1]->Field->AsFloat=FormatFloat("0.00",123.45);
这与DBGrid1->Columns->Items[1]->Field->AsFloat=123.45;没有区别,当前记录可以正常显示,等再添加新记录时,它就变了.这就是我的问题所在.
To Hercules1947(南船) ( ) 等人:
转为String不是我要的结果,因为我还要利用DBGrid进行修改后同步保存到数据库的Float型字段.
Top
15 楼zzzl(不拉拉链)回复于 2006-03-10 15:47:42 得分 0
但你起的贴名很聪明Top
16 楼sunliwen780502(孙立文)回复于 2006-03-11 18:40:30 得分 5
这个可以通过设置数据库表的方式来解决.
尽量采用双精度double.Top
17 楼jone7319(舍我其谁)回复于 2006-03-11 21:08:51 得分 0
sunliwen780502(孙立文) ,具体怎么设啊
Top
18 楼jone7319(舍我其谁)回复于 2006-03-11 22:02:04 得分 0
用DBGrid 显示数字型字段时,均存在这样的问题,如1.23就会变为1.229999.....
这样的问题大家是怎么解决的?
我原想在SQL中处理:如 select a,b,int(c*100+0.5)/100.0 from table 等方式解决,这个显示问题是解决了,但新的问题又来了,即我用int(c*100+0.5)/100.0得到的字段已不能对应数据库中的c字段,故不能通过在DBGrid中修改数据保存到数据库中.Top
19 楼jone7319(舍我其谁)回复于 2006-03-14 09:22:23 得分 0
问题没解决,路过高手帮帮忙,谢谢!Top
20 楼kwokwinglau(每天前进1%)回复于 2006-03-25 08:20:33 得分 0
DBGrid1->Columns->Items[1]->DisplayFormat="0.00"; //絕對有.Top




