Z zhugenan Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-05 #1 我在进行数据库加减后总会出现一长串数字如4.999999901111111111111。。。。等等 其实应该是5。请问该如何避免,或者在DELPHI中有没有四舍五入的办法使它变为5??
S SS2000 Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-05 #5 如果你总是整数,就不要定义为浮点数(DOUBLE)!
D delphiroad Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-05 #6 你是使用sqlserver吗?我也遇见过,只能用ADO! 对于其它数据库类型,我都没有遇到过这个问题! 另外,使用上述几位的做法再加上一些小技巧,也可以达到比较准确的结果。 对于用BDE与sqlserver连接出现误差的原因,我也没搞懂,可能是Delphi组件本 身的问题吧,本来想Delphi5有的问题,Delphi6应该解决了吧,结果还是一样!
你是使用sqlserver吗?我也遇见过,只能用ADO! 对于其它数据库类型,我都没有遇到过这个问题! 另外,使用上述几位的做法再加上一些小技巧,也可以达到比较准确的结果。 对于用BDE与sqlserver连接出现误差的原因,我也没搞懂,可能是Delphi组件本 身的问题吧,本来想Delphi5有的问题,Delphi6应该解决了吧,结果还是一样!
荷 荷塘新月 Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-06 #8 如果你用了DATACONTROLS之类的控件,可以在DISPLAYFORMAT和EDITFORMAT中设置格式为 0.##,这样可以显示为想要的格式了。
B bigroute Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-06 #10 给你提个建议,数据库中用整型保存, 比如说4.50(两位小数的)在数据库中应该为450(100倍), 保存的时候 乘100,用的时候再除100。 这样算起来比较准确。
Z zhaqiong Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-06 #11 定义字段类型的小数位不要太多了就好了 例如存放金额时定义四位小数就够了
A aijun Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-06 #12 Function S4R5(Total:extended):extended begin Result=int(Total+0.5); end;
G ghuan Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-06 #15 formatcurr('0',4.99999990);formatcurr('0.00',4.989999901)
L lop Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-06 #17 很久以前我也好象问达类似的问题,后来好象是用一个定义函数来解决伯。
D dana Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-06 #18 user math; onactive; SetRoundMode(rmUp);//rmDown、rmNearest 还有很多参数可以自已看帮助。
Z zhenghui Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-06 #19 在最近版本的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;
在最近版本的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;
风 风中的狼 Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-08 #20 太简单了,将数据库中这个字段的类型设为数值--双精度型,就OK了~