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了。

此記!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章