Z zf501 Unregistered / Unconfirmed GUEST, unregistred user! 2001-04-01 #1 数据库中Float字段,小数运算为什么总有掉尾数的现象 如 123.45 运算时总是 123.4499999......,应该如何解决这个问题。
S sportsman Unregistered / Unconfirmed GUEST, unregistred user! 2001-04-02 #3 数据库中Float字段也有小数位后几位的,设定一下
H hnzgf Unregistered / Unconfirmed GUEST, unregistred user! 2001-04-02 #4 设置BDE的Enabled BCD为 True,讨论好多次了
I Iknow Unregistered / Unconfirmed GUEST, unregistred user! 2001-04-02 #5 正常的, 浮点数本来就是不精确表示的, 有个有效位数的问题, 一般的浮点数的精度大概是5~7位有效数字左右, 双精度的可能高些, 也不过是十几位. 用BCD的方式是一个解决问题的方法, 它是将浮点数用BCD码(Binary-Coded decimal) 来表示, 本质上说就象我们手工做加减乘除一样, 是按实际位数来算的, 但缺点就是 速度比较慢, 转过来转过去的.
正常的, 浮点数本来就是不精确表示的, 有个有效位数的问题, 一般的浮点数的精度大概是5~7位有效数字左右, 双精度的可能高些, 也不过是十几位. 用BCD的方式是一个解决问题的方法, 它是将浮点数用BCD码(Binary-Coded decimal) 来表示, 本质上说就象我们手工做加减乘除一样, 是按实际位数来算的, 但缺点就是 速度比较慢, 转过来转过去的.
Z zf501 Unregistered / Unconfirmed GUEST, unregistred user! 2001-04-10 #7 我用的数据库是Pdox,将BDE改为BCD为True,也不起作用不知为何保存到表中的仍是1.1999999
L livesource Unregistered / Unconfirmed GUEST, unregistred user! 2001-04-11 #9 手動截取不就可以了, round(100*123.4499999)/100
Z zf501 Unregistered / Unconfirmed GUEST, unregistred user! 2001-04-12 #10 T0:livesource 我的小数位不是故定几位的,手动截取不可以四舍五入。
杜 杜宝 Unregistered / Unconfirmed GUEST, unregistred user! 2001-04-13 #11 TO:zf501 实在看不下去了, 相信你也知道,这个尾数差非常小,只要你程序要求的精度不是那么 严格(到0.0000000001)的话,都可以用livesource的方法将这个0.0000000001舍掉,只要 你根据所用数据的可能的最小位数,加上一两位取整就是了。如:0.007-0.006=0.000999999999999999 乘上1000000取整再除就是0.001,我想只要不是太高的数学计算,你的东西如不会用到小数 点后6位的。 其它的方法有用设DisplayFormat来解决,只是驼鸟战术,显示的时候没问题,但差值始 终存在,长期积累...,所以应该在对字段付值时按livesource的方法处理它, 还有用FloatToStr,和StrToFloat来处理,原理与liveSource一样,但还是liveSource方 法简单,
TO:zf501 实在看不下去了, 相信你也知道,这个尾数差非常小,只要你程序要求的精度不是那么 严格(到0.0000000001)的话,都可以用livesource的方法将这个0.0000000001舍掉,只要 你根据所用数据的可能的最小位数,加上一两位取整就是了。如:0.007-0.006=0.000999999999999999 乘上1000000取整再除就是0.001,我想只要不是太高的数学计算,你的东西如不会用到小数 点后6位的。 其它的方法有用设DisplayFormat来解决,只是驼鸟战术,显示的时候没问题,但差值始 终存在,长期积累...,所以应该在对字段付值时按livesource的方法处理它, 还有用FloatToStr,和StrToFloat来处理,原理与liveSource一样,但还是liveSource方 法简单,