先说明数据库为sql server ,allcharge 为float型,RsTT!allcharge的值为119.935 Ac = Int((RsTT!allcharge) * 100 + 0.5) / 100 '四舍五入
Debug.Print Ac结果为: 119.93
Debug.Print Ac结果为: 119.93
解决方案 »
- 如何一次往数据库里写入多条记录?
- 利用Setup Factory 导入注册表问题
- 如何知道是否上网了!!!用 ping 的方法~~(其它方法好用也可以,在网上找的都不好用!!)
- 为什么xp下不能删除根目录下的文件夹?
- 把字符串输出到文件中,怎么样把字符串前后的双引号出掉!!(在线等,马上结帖)
- 打包问题,谢谢!`
- 使用data的dataBaseName(菜鸟问题)
- 看到个帖子, 笑尿了, 分享给大家乐一乐...........................................................
- 怎样得到网络的连接状态???
- 为什么不能更新数据库?
- 来者有分,谢谢!!!!(急用)
- 有ACCESS数据库打包的问题
Debug.Print Ac
结果为: 119.94 这是为什么?谁能给我一个答案?
不等于119.94等于什么???!!!!!!!
11993.5 + 0.5 = 11994
int(11994) =11994
11994/100 =119.94
你说是它等于什么?
描述返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。语法Round(expression [,numdecimalplaces])Round函数语法有如下几部分:部分 描述
expression 必需的。要进行四舍五入运算的数值表达式。
numdecimalplaces 可选的。数字值,表示进行四舍五入运算时,小数点右边应保留的位
数。如果忽略,则Round函数返回整数。
Ac = Int((RsTT!allcharge) * 100 + 0.5) / 100 '四舍五入
Debug.Print Ac
Ac = Int(CStr((RsTT!allcharge)) * 100 + 0.5) / 100 '四舍五入
Debug.Print Ac结果为:
119.93
119.94
?????????????????????????????
Dim a As Single
a = 119.935
Debug.Print Int(a * 100 + 0.5) / 100
结果为:119.93
Dim a As Single
a = 119.935
Debug.Print Int(cstr(a) * 100 + 0.5) / 100
结果为:119.94你看清楚你自己在数据库里面字段的类型
a = 119.935
Debug.Print a
Debug.Print a*100
Debug.Print (a * 100) + 0.5结果为:
119.935
11993.5
11993.9997558594 ????????????????????????????????????????????????????
begin
a:=119.935 ;
showmessage(FloatToStr(a*100+0.5));
end;在delphi中结果也是11993.9997558594
Dim a As Single
a = 119.935
Debug.Print a
Debug.Print a * 100
Debug.Print (a * 100) + 0.5
Debug.Print CStr(a * 100) + 0.5结果:
119.935
11993.5
11993.9997558594
11994看来只能用cstr()来解决了
Ac = Int((RsTT!allcharge) * 100 + 0.5) / 100 '四舍五入
Debug.Print Ac中,RsTT!allcharge的数据类型如楼主所说是float型,
当它在vb自动中会转换为vb中的Single 类型,这样得到的 Ac 就是 119.93了,
如果使得转换成 Double 型,Ac 就是 119.94了。
这个问题应该时vb对于数据类型的默认转换造成的。
所以float型存储的值是近似值,不要认为是加法和乘法就不会有那种近似值出现
要知道计算机是二进制运算的。
其他的呢,xo2000(平凡人生) 都说了,我也就不罗嗦了
Debug.Print Ac
用浮点就是这样!
由于上述原因,一般在比较浮点数一般不使用等号。也就是说,不使用8.2872 - 8.2871 =0.0001这样的形式,而是看两个浮点的差的绝对值是否非常接近零,如Abs(8.2872 - 8.2871 - 0.0001) < 1e-10就认为8.2872 - 8.2871 =0.0001了。
正是因为浮点数的问题,取出来的值可能是119.9349999.......