Excel中VBA 的Round 函数与工作表Round 函数的区别

转载自:http://www.educity.cn/office/7090.html

Excel中VBA 的Round 函数与工作表Round 函数的区别是什么

浏览:1306 |更新:2015-09-19 14:30
2015-09-18更新 此答案由站在风中的女子提供 1
  • VBA的Round函数与工作表的Round函数均为四舍五入函数,两个函数的语法相同,但有着很大的不同,其主要区别如下:

    1:VBA的Round函数的第二个参数可省略,当省略时,表示返回整数。工作表的Round函数不可省略。

    2:VBA的Round函数的第二参数不可为负数。工作表的Round函数的第二个参数可以为负数,当为负数时,表示向小数点左边取保留位数

    3:工作表Round函数进行四舍五入时,将查看保留位数的后一位数字,该数字大于或等于5时,则进1,反之不进位。而VBA的Round函数规则如下:

    当保留位数的后一位数字大于5时,进位

    当保留位数的后一位数字小于5时,不进位

    当保留位数的后一位数字为5时,若该位之后存在任何大于0的数,进位

    当保留位数的后一位数字为5时,若该位之后的数为0且保留位的数字为奇数时,进位

    当保留位数的后一位数字为5时,若该位之后的数为0且保留位的数字为偶数时,不进位

    运用上述规则,若计算表达式Round(Number.2)的值时,随着Number的数值不同,结果如下:

  • '===========================================================
  • 博主PS:
  •     因为我们的科学计算统计要求是按照“GB/T8170-2008《数值修约规则与极限数值的表示和判定》”的规定进行四舍六入五取单双,

  • 所以,以前在excel里面找到的Round函数是明显用不成的,而且当时头脑短路,没有想起来试试VBA里面的这个Round函数,后来朋友告知才仔细测试了一下,果然,VBA里面的Round函数就是我需要的四舍六入五取单双!!! 因为以前没有想到用VBA里面这个Round,所以,当时我自己专门写了一个函数做这个四舍六入五取单双用:
  • Function CRound(cr As Double, Optional dc As Integer = 0) As Double
    Dim ts As String, Tsi As String, Tsis As String
    Dim Tsis5 As String, Tsii As Integer, Tsii5 As Integer
    Dim ci As Double, m As Double, i As Integer
        ci = cr
        m = 1
        For i = 1 To dc
            m = m * 10 
        Next
        ci = ci * m
        ts = "   " & CStr(ci * 10)
        If InStr(ts, ".") > 0 Then
            Tsi = Mid(ts, InStr(ts, ".") - 1, 1)
            Tsis = Mid(ts, InStr(ts, ".") + 1)
            Tsis5 = Mid(ts, InStr(ts, ".") - 2, 1)
        Else
            Tsi = Right(ts, 1)
            Tsis = ""
            Tsis5 = Left(Right(ts, 2), 1)
        End If
        Tsii = Val(Tsi)
        If Tsii <= 4 Then '四舍六入,五取单双
    CRound = Int(Val(Str(ci)))
        ElseIf Tsii > 5 Then
    CRound = Int(Val(Str(ci))) + 1
        Else
            If Len(Tsis) > 0 Then
    CRound = Int(Val(Str(ci))) + 1
            Else
                Tsii5 = Val(Tsis5)
                If (Tsii5 Mod 2) = 0 Then
    CRound = Int(Val(Str(ci)))
                Else
    CRound = Int(Val(Str(ci))) + 1
                End If
            End If
        End If
        CRound = CRound / m
    End Function
    现在看来不再需要这个我自己写的复杂函数了,内容改成下面这样简单的即可:

         

Function CRound(cr As Double, Optional dc As Integer = 0) As Double
	CRound = Round(cr, dc)
End Function

    当然,貌似asp round也是和VBA的规则一样,也就用不到我写的那个复杂的Cround了。

此记!


猜你喜欢

转载自blog.csdn.net/jessezappy/article/details/80773726
今日推荐