Excel中VBA的Round函数与⼯作表Round函数的区别
转载⾃:www.educity/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
excel中round函数的使用方法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了。此记!