转载自: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了。
此记!