小问题,四舍五入,急!!!200分,帮忙者都有分。(200分)

  • 主题发起人 主题发起人 zhugenan
  • 开始时间 开始时间
Z

zhugenan

Unregistered / Unconfirmed
GUEST, unregistred user!
我在进行数据库加减后总会出现一长串数字如4.999999901111111111111。。。。等等
其实应该是5。请问该如何避免,或者在DELPHI中有没有四舍五入的办法使它变为5??
 
你用format函数试试
 
应该是BDE的BCD ENABLED没有设吧
 
使用round()函数
 
如果你总是整数,就不要定义为浮点数(DOUBLE)!
 
你是使用sqlserver吗?我也遇见过,只能用ADO!
对于其它数据库类型,我都没有遇到过这个问题!
另外,使用上述几位的做法再加上一些小技巧,也可以达到比较准确的结果。
对于用BDE与sqlserver连接出现误差的原因,我也没搞懂,可能是Delphi组件本
身的问题吧,本来想Delphi5有的问题,Delphi6应该解决了吧,结果还是一样!
 
round()很快搞定
 
如果你用了DATACONTROLS之类的控件,可以在DISPLAYFORMAT和EDITFORMAT中设置格式为
0.##,这样可以显示为想要的格式了。
 
round 或者 强制转换
 
给你提个建议,数据库中用整型保存,
比如说4.50(两位小数的)在数据库中应该为450(100倍),
保存的时候 乘100,用的时候再除100。
这样算起来比较准确。
 
定义字段类型的小数位不要太多了就好了
例如存放金额时定义四位小数就够了
 
Function S4R5(Total:extended):extended
begin
Result=int(Total+0.5);
end;
 
convert(int,xxx)
 
round(x) 四舍五入
 
formatcurr('0',4.99999990);formatcurr('0.00',4.989999901)
 
還是BDE的問題, BCD 設置下吧.OK
 
很久以前我也好象问达类似的问题,后来好象是用一个定义函数来解决伯。
 
user math;
onactive;
SetRoundMode(rmUp);//rmDown、rmNearest
还有很多参数可以自已看帮助。
 
在最近版本的Delphi Pascal 编译器中,
Round 函数是以 CPU 的 FPU (浮点部件) 处理器为基础的。
这种处理器采用了所谓的 "银行家舍入法",即对中间值 (如 5.5、6.5)
实施Round函数时,处理器根据小数点前数字的奇、偶性来确定舍入与否,
如 5.5 Round 结果为 6,而 6.5 Round 结果也为6, 因为 6 是偶数。
所以round(4.9999999....)是4,而不是5,所以用round不行。
自己遍个函数吧
Function FRound(x:Extended):Int64
var
Temp:Extended;
begin
Temp:=Frac(x);
if temp>=0.5 then
Result:=Trunc(x)+1
else
Result:=Trunc;
end;
 
太简单了,将数据库中这个字段的类型设为数值--双精度型,就OK了~
 
后退
顶部