求可靠、稳定四舍五入函数
试过几个都不太好
Fix((dblValue + 0.5 / (10 ^ (iDigits + 0))) * (10 ^ iDigits)) / (10 ^ iDigits)大家给个函数!谢了!!
试过几个都不太好
Fix((dblValue + 0.5 / (10 ^ (iDigits + 0))) * (10 ^ iDigits)) / (10 ^ iDigits)大家给个函数!谢了!!
解决方案 »
- 请教自动发贴的方法
- 我要开发modem拨号程序,但是没有硬件,请问有没有软件可以虚拟两个modem的环境?
- 连接 ORACLE8.1.7 的 问题,很古老的问题,个人头一次接触,在线等待!
- 如何在winsock 里传输一个自定义结构
- paint事件
- 请教 超不可思议的问题:写的控件放在本机上调用是可以的,要放在服务器上,在客户端调用就出现错误
- 向各位求教关于listview控件的一点使用问题!多谢了!请进!
- 模拟MicrosoftOfficeXP菜单.下载:http://www.dapha.net/vb/list.asp?id=1926
- 高分求教(分不够可再加)!如何读取硬件端口的数据?外部设备是打卡机。
- 日记本程序的一个小问题?
- 送分,什么是BCD码?
- 关于DataReport的问题?
数字加0.5 然后INT就可以了
CDec 函数不能返回独立的数据类型,而总是返回一个 Variant,它的值已经被转换为 Decimal 子类型。
如:
cint(1.5)返回 2
int(1.5) 返回 1
四舍五入不准确,是因为二进制浮点数跟十进制数之间的误差造成的,微软知识库里面专门对此问题有说明。对于整数,二进制跟十进制是可以一一对应换算的,
但对于分数,二进制数是不能跟十进制数一一对应的,
因为能够被10除尽的数,不一定能够被2除尽,
这样就造成有些十进制小数转换浮点数时出现误差,
如果喜欢在Sql Server里面使用float,real数据类型的,肯定经常会观察到这样的情况。四舍五入的误差,也是这样造成的。其实这个问题不光在vb里面有,就算是汇编也有,intel还专门出过声明,说明这是正常结果,而不是cpu错误。虽然微软知识库里面推荐用format来解决这一问题,
但个人认为,还是用cdec转换数据类型以后再round为正解。
原因:
dec就是十进制,vb6未提供十进制数据类型,提供cdec函数就是为了处理这样的情况。毕竟format函数不是专门为四舍五入做的,就象上面ch21st(风尘鸟)提供的情况,xp可能就无效(本认未验证)
round(cdec(0.045),2)=0.04
round 的用法
如果小数点后第2为偶数 第3位5 则 不进
怎么解决这个问题