四舍五入问题请教高手!!!!有数据:
aa=23.505
我用round(aa,2) 得到:23.5
我想要得到23.51该如何得到,谢谢!!!!

解决方案 »

  1.   

    用最笨最有效的方法:aa=23.505
    aa=int(aa*1000)
    aa=aa+val(right(str(aa),1))
    aa=int(aa/10)
    aa=aa/10
    可以把转换的那段,写成一个 function。 笨方法哦~
      

  2.   

    如果aa是一个Double , 接收 text1.text来的数字 23.505 ,则会变成 23.504999999999.如果一四舍五入,肯定入不了了,失真的误差哟~
      

  3.   

    出问题前,建议先看说明(或者帮助)
    -----------------------------------------
    Round函数
    返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。
    语法
    Round(expression [,numdecimalplaces])
    Round函数语法有如下几部分:
    部分                     描述 
    expression 必需的。要进行四舍五入运算的数值表达式。 
    numdecimalplaces 可选的。数字值,表示进行四舍五入运算时,小数点右边应保留的位数。如果忽略,则Round函数返回整数。 
    -----------------------------------------------------------aa=23.505
    bb=round(aa,2)             '这不就是保留右边两位有效数字
      

  4.   

    楼上的,你试过了吗?
    不用那么复杂!
    四舍五入的简单方法:+ 最小精度的1/2 !aa=23.505 aa= aa + 0.005round(aa,2)
      

  5.   

    我不知道这样可不可以,不过我试了一下,到是可以的。

    bb=format(aa,"0.00")
    这样就保留两位,而且还是四舍五入
      

  6.   

    忘了,呵……
    要保留几位就在format里加几个"0"
    如保留5位则
    bb=format(aa,"0.00000")
      

  7.   

    To:  gpo2002(我属于纯偶像派一点实力也没有的那一种)  ,下面的四舍五入正确应该得到23.50 ,下例实际结果是23.51 :Dim aa As Double
    'aa = Val(Text1.Text)
    aa=23.5045
    aa = aa + 0.005
    MsgBox Str(Round(aa, 2))
    To:Sant11(S蚂蚁11)   你的方法下面例子得的结果23.50,正确结果是23.51 Dim aa As Double
    aa = 23.505
    MsgBox Str(Format(aa, "0.00"))
      

  8.   

    penglc(猎者)不会啊。。我刚还试了。
    如aa=22.505
    的话,用我的方法可以得到22.51Private Sub Form_Load()
    Dim aa As Double
    aa = 23.5045
    MsgBox Str(Format(aa, "0.000"))
    End Sub我刚还用这个试了,结果是23.505
      

  9.   

    可能今天我忙头晕了,  上面两个例子,放到command_click中我感觉得到的结果好象都不是正确结果。      我来学习~     :)
      

  10.   


    大家试试这个看行不aa = 23.505
    b = 2                                 '设定小数点后的保留位数
    c = InStr(aa, ".")                    '得到小数点的位置
    d = Left(Mid(aa, c + b + 1), 1)       '取保留位数后一位数字
    If Val(d) > 4 Then
    aa = Val(Left(aa, c + b)) + 1 / (10 ^ b)
    Else
    aa = Val(Left(aa, c + b))
    End If
      

  11.   

    那可能是我vb出问题了, 你试试下面的代码:
    Private Sub Command1_Click()
    Dim aa As Double
    aa = 23.505
    MsgBox Str(Format(aa, "0.00"))End Sub上面的我msgbox得的 23.5  ,测aa=23.5045 留三位得的结果是 23.504 ...
    头晕了, 睡觉,明天再来看你们的回贴,说不定就理顺了
      

  12.   

    我放到command里也试了,结果还是可以四舍五入的。。
      

  13.   

    同意 lnhsgj(黑鹰) , 把你的做成function就行了。 不过好多语句哦,vb的四舍五入真那么费劲吗?
      

  14.   

    听说Round实行一个国际财务通用的四舍五入取偶法
    round(2.015,2)=2.02
    round(2.025,2)=2.02
    round(2.035,2)=2.04
    round(2.045,2)=2.04
      

  15.   

    我来解释:即
    (1)对于最小精度的后一位如果是5,那么如果其前面的奇数,则进1,如果是偶数则只保留偶数;
    (2)如果对于最小精度的后一位小于5,保留不变;
    (3)如果对于最小精度的后一位大于5,则进1 。
    例如:
    假设最小精度取小数点后三位:
    2.018674  --> 2.019  (根据第(3)条,“6”是大于5,所以进1,“8”变“9”)
    2.018574  --> 2.018  (根据第(1)条,“5”前面是偶数“8”,不进)
    2.018474  --> 2.018   (根据第(2)条,“4”是小于5,不进)
    2.017574  --> 2.018  (根据第(1)条,“5”前面是奇数“7”,进1,"7"变"8")
      

  16.   

    谢谢各位的帮助!!!谢谢!!!
    to zhangxiushu(山高水长):用vb如何判断奇偶数,谢谢!!!!!!
      

  17.   

    round执行的是标准的四舍五入,不仅是国际财务通用,科学计数中也是这种规则,即对于精度之后一位刚好是5的情况取最近的偶数结果,这样才能保证四舍五入的绝对平均