轉載自: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了。
此記!