Delphi 通过AdoQuery 操作SQL Server中Numeric字段小数未被截断有关问题

Delphi 通过AdoQuery 操作SQL Server中Numeric字段小数未被截断问题
Sql server 中的本来有自动舍入的功能,可通过Delphi Tadoquery操作的时候却不四舍五入,直接按小数位截断,有什么好的处理方法?

如:字段 numeric(18, 2)  赋值 15.5286  最后值为15.52 ,而不是按四舍五入存储为15.53
------解决思路----------------------
对于SQL SERVER来说应该没有方法,对于DELPHI来说是有的:
Result:=Trunc(theNumeric*100)/100
上面的代码可以插入到FIELD的OnSetText事件中自动处理
ADOQuery1TestFieldSetText(Sender: TField; const Text: string);
begin
    Sender.Value:=Trunc(StrToFloat(Text)*100)/100;
end;
------解决思路----------------------
你自己先处理好,再存数据库吧
------解决思路----------------------
你可以在保存表的一行值时,通过函数Trunc()取整解决。大致代码:
var  X:double;

FieldByName('字段名').asFloat:=Trunc(X*100)/100;

------解决思路----------------------
Round才复合楼主的意思
Round(n*100)/100
------解决思路----------------------
就使用Moeny类型挺好的
------解决思路----------------------
那就自己先处理好,然后再写进去咯。
------解决思路----------------------
引用:
拼音输入法造成歧义了,题目应该是  字段小数   位  被截断问题

因为SQL Server处理是正确了,用企业管理器都会四舍五入,就Delphi里面操作就会截断溢出尾数,真是比较奇怪!
字段比较多,每个字段都用Round处理是可以但是很麻烦,能不能修改Ado控件哪里解决这个问题?

我发现Float和Money类型不会存在这个问题,实在不行就换成Moeny类型了。


TBCDField为什么不用呢?这个是我认为最好用的
aField.AsBCD不就好了,这是专门为NUMERICA 字段设计的啊
------解决思路----------------------
Moeny类型 ,比较好。
------解决思路----------------------
功能说明:对一个实数进行四舍五入。(按照银行家算法)  
例: 
var
    i, j: Integer; 
begin
    i := Round(1.5); // i等于2 
    j := Round(2.5); // j等于2 
end; 
  
在Delphi中使用Round函数得到的答案有时与我们所预期的会不太一样:采用的是四舍六入五留双。即当舍或入位大于或小于五时按四舍五入来处理 
  
,而当舍或入位等于五时,就要看前面一位是什么,根据奇进偶不进,它总是返回一个偶数值。 
例:             
i:= Round(11.5)//i等于12 
i:= Round(10.5)//i等于10 
  
这种Round其实是按照银行家算法,统计学上一般都用这种算法,比传统的"四舍五入"要科学。 
如果要使用传统的"四舍五入"方法,可以使用下面函数: 
function RoundClassic(R: Real) 
  
2.trunc(取得X的整数部分) 
如:trunc(-123.55)=-123, floor(123.55)=123
  
3.ceil(取得大于等于X的最小的整数) 
  
如:ceil(-123.55)=-123, ceil(123.15)=124
  
4.floor(取得小于等于X的最大的整数) 
  
如:floor(-123.55)=-124,floor(123.55)=123
------解决思路----------------------
用 round