错得莫名其妙!大虾们救命!(50分)

  • 主题发起人 主题发起人 jsongy
  • 开始时间 开始时间
J

jsongy

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是SQL SERVER2000数据库,table1中存在两个字段:
coatlen[float(8)],waistline[float(8)]
我在Delphi中计算它们的值分别为0.5,0.6(这是我调试的时候看到的值),
然后用query1.ApplyUpdates将它们存进table1中,可是却发现两个字段的值分别是0.5和
-.600000000000001。我试了很多次,结果都一样。
我感到很奇怪,为什么会出现这种情况呢!真是莫名其妙!
不知道那位大虾曾经遇到过这种情况?救命!

 
用SQL SERVER 提供的函数round()取小数位数
 
在qrexpression中有一个属性可以设定显示格式,设为"#.00"即为显示两位小数.如不行还可以
用round()设定小数位.
 
能说清楚一点吗?我要的格式就是0.5,0.6这样的!
 
我这里没有sql server
你可以参照一个sql server2000的中文帮助
查找round函数的说明


 
那如果用round函数的话,应该在delphi中怎么写呢?
 
这个问题比较复杂,是因为数据位的精度引起的(0.6和0.60在存储时不一样),建议你采用以下两种方法之一:
1/将float字段类型改为货币类型;
2/在向数据库更新的时候就将小数点处理好(例如用format函数处理);
 
设置自段的DisplayFormat属性为###,##0.00
 
试试formatfloat('#,##0.##',数值)
 
DisplayFormat属性在那?我怎么找不到?
 
DisplayFormat是字段的属性
如果你有永久字段的话
可以双击TQuery
会看到一些永久字段
点击其中的一个,就可以看到他的属性了
其中一个就是DisplayFormat
 
但是我要求的字段不能是固定列!
还有别的办法吗?
 
显示的时候可以用控件格式化显示数据
后者在现实之前你用fromat函数内部处理一下
 
但我觉得是不是Sql Server的问题呢?因为coatlen[float(8)],waistline[float(8)]
两个字段的值计算时分别为0.5,0.6,可是保存的时候后者的只才变成了-.600000000000001!
 
对呀~~ [:)]
这就是sql server的问题 字段问题
所以
来自:张自骞, 时间:2002-8-7 22:14:00, ID:1249898
这个问题比较复杂,是因为数据位的精度引起的(0.6和0.60在存储时不一样),建议你采用以下两种方法之一:
1/将float字段类型改为货币类型;
2/在向数据库更新的时候就将小数点处理好(例如用format函数处理);
的意见你看看行不行
 
实际上我有十几个字段都是象coatlen[float(8)]一样的,可是为什么就只有waistline[float(8)]
这个字段会出现这样的问题呢?
 
用FLOAT记录浮点数本来精度就不高,一般记录钱用货币型(Money or Currency),
其它浮点数用双精度(Double Precision),对FLOAT不能要求太高。^_^
 
问题已经解决了
在将数据写入数据库之前用formatfloat函数处理处理以下就行了

谢谢各位大虾了,一会散分。

不过我还是对Sql Server存在疑问,为什么会出现这种情况呢?大家再讨论讨论!
 
formatfloat 是sql的函数还是delphi的函数
如果是delphi的
function FormatFloat(const Format: string; Value: Extended): string;
返回值是string
难道数据库中字段的设置还是
coatlen[float(8)],waistline[float(8)]吗?
一开始你存入的0.5,0.6是什么类型?

~~
机器太破,装不起sql server~~
5555~~
[:(]
 
formatfloat是Delphi的,它返回的是string类型的,所以还需要转换一下。
strtofloat(formatfloat('0.00',value))就行了!value是0.5,0.6等浮点数。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部