求可靠、稳定四舍五入函数
试过几个都不太好
Fix((dblValue + 0.5 / (10 ^ (iDigits + 0))) * (10 ^ iDigits)) / (10 ^ iDigits)大家给个函数!谢了!!

解决方案 »

  1.   

    自己做一个,很方便的
    数字加0.5 然后INT就可以了
      

  2.   

    最好的方法INT(I+0.5)。INT函数是相当于舍弃小数位的函数,将浮点数在数轴上向左找最近的整数,FIX函数是向0点找最近的整数,综上所述,使用INT函数将原有的数字进行+0.5然后取整,在C中强制类型转换取整实现四舍五入是同样的原理。 
      

  3.   

    Round(CDec(iDigits ),2)CDec是VB专门提供的将数字转为10进制处理的函数。VB没有专门的10进制数据类型,
    CDec 函数不能返回独立的数据类型,而总是返回一个 Variant,它的值已经被转换为 Decimal 子类型。
      

  4.   

    format(i,"#,##0")带千分位的四舍五入
      

  5.   

    数字加0.5 然后INT就可以了
      

  6.   

    INT只能得到整数,如果要保留小数呢?
      

  7.   

    如果不是winxp系统,最简单的办法VB已经提供了,FORMAT(123456.789,"###,###.##")函数,这可是真的四舍五入,而不是四舍六入五留双啊!但是发现在WINXP中FORMAT函数达不到预期的效果了,装了SP也不见效
      

  8.   

    用Cint取整后是四舍五入
    如:
     cint(1.5)返回 2
     int(1.5) 返回 1
      

  9.   

    vb四舍五入不准确的问题,以前专门有贴子讨论过,不过CSDN好像把老贴都去掉了??所谓“四舍六入五留双”的提法是错误的,
    四舍五入不准确,是因为二进制浮点数跟十进制数之间的误差造成的,微软知识库里面专门对此问题有说明。对于整数,二进制跟十进制是可以一一对应换算的,
    但对于分数,二进制数是不能跟十进制数一一对应的,
    因为能够被10除尽的数,不一定能够被2除尽,
    这样就造成有些十进制小数转换浮点数时出现误差,
    如果喜欢在Sql Server里面使用float,real数据类型的,肯定经常会观察到这样的情况。四舍五入的误差,也是这样造成的。其实这个问题不光在vb里面有,就算是汇编也有,intel还专门出过声明,说明这是正常结果,而不是cpu错误。虽然微软知识库里面推荐用format来解决这一问题,
    但个人认为,还是用cdec转换数据类型以后再round为正解。
    原因:
    dec就是十进制,vb6未提供十进制数据类型,提供cdec函数就是为了处理这样的情况。毕竟format函数不是专门为四舍五入做的,就象上面ch21st(风尘鸟)提供的情况,xp可能就无效(本认未验证)
      

  10.   

    cint 不行啊cint(2.5) = 2
      

  11.   

    fuxc(Michael(闭关修炼ing)) 看看 这个
     round(cdec(0.045),2)=0.04
    round 的用法
    如果小数点后第2为偶数 第3位5  则 不进
    怎么解决这个问题