Round函数用的是所谓的银行算法:奇进偶不进这个是我在开发时写的一个可以四舍五入的函数 Public Function fcRoundValue(dblValue As Double, lngDecimal As Long) As DoubleDim strTempRemain As String '数值保留部分 Dim lngTempRemain As Long '数值保留部分位数 Dim dblTempRound As Double '数值四舍五入部分 Dim strDecimal As String '小数点位置 Dim strTempValue As String '临时数值变量 Dim dblTempcount As Double '四舍五入的值 Dim lngLoop As Long '循环变量
'如果四舍五入的设定小数位数比实际小数位数要多(实际数值没有小数) If strDecimal = 0 Then fcRoundValue = dblValue Exit Function '如果四舍五入的设定小数位数比实际小数位数多或者相等(实际数值有小数) ElseIf (CLng(strDecimal) + lngDecimal) >= Len(strTempValue) Then fcRoundValue = dblValue Exit Function End If
'如果需要四舍五入(四舍五入部分数值大于等于5) If (dblTempRound >= 5) Then dblTempcount = 1 '计算四舍五入的值 For lngLoop = 1 To lngDecimal dblTempcount = dblTempcount / 10 Next '如果是正值或零值 If (dblValue >= 0) Then '计算最终结果 fcRoundValue = CDbl(strTempRemain) + dblTempcount '如果是负值 ElseIf (dblValue <= 0) Then '计算最终结果 fcRoundValue = CDbl(strTempRemain) - dblTempcount End If '如果不需要四舍五入(四舍五入部分数值小于5) ElseIf (dblTempRound < 5) Then '计算最终结果 fcRoundValue = CDbl(strTempRemain) End If End Function
Int(数字+0.5)
哇,聪明~~
不过他的舍是0<=数<=5
也就是2.50000001才入
需大于5
y=Round(x+Sgn(x)*EPS)
Public Function fcRoundValue(dblValue As Double, lngDecimal As Long) As DoubleDim strTempRemain As String '数值保留部分
Dim lngTempRemain As Long '数值保留部分位数
Dim dblTempRound As Double '数值四舍五入部分
Dim strDecimal As String '小数点位置
Dim strTempValue As String '临时数值变量
Dim dblTempcount As Double '四舍五入的值
Dim lngLoop As Long '循环变量
'转换数值类型
strTempValue = CStr(dblValue)
'小数点位置
strDecimal = InStr(strTempValue, ".")
'如果四舍五入的设定小数位数比实际小数位数要多(实际数值没有小数)
If strDecimal = 0 Then
fcRoundValue = dblValue
Exit Function
'如果四舍五入的设定小数位数比实际小数位数多或者相等(实际数值有小数)
ElseIf (CLng(strDecimal) + lngDecimal) >= Len(strTempValue) Then
fcRoundValue = dblValue
Exit Function
End If
'取得保留位置部分的数据及数据长度
strTempRemain = Left(strTempValue, (CLng(strDecimal) + lngDecimal))
lngTempRemain = Len(strTempRemain)
'取得数据四舍五入部分的值
dblTempRound = gfcConvzero(CDbl(Mid(strTempValue, lngTempRemain + 1, 1)))
'如果需要四舍五入(四舍五入部分数值大于等于5)
If (dblTempRound >= 5) Then
dblTempcount = 1
'计算四舍五入的值
For lngLoop = 1 To lngDecimal
dblTempcount = dblTempcount / 10
Next
'如果是正值或零值
If (dblValue >= 0) Then
'计算最终结果
fcRoundValue = CDbl(strTempRemain) + dblTempcount
'如果是负值
ElseIf (dblValue <= 0) Then
'计算最终结果
fcRoundValue = CDbl(strTempRemain) - dblTempcount
End If
'如果不需要四舍五入(四舍五入部分数值小于5)
ElseIf (dblTempRound < 5) Then
'计算最终结果
fcRoundValue = CDbl(strTempRemain)
End If
End Function