《关于“四舍五入”总结》
时 间:2009-05-14 08:39:48
作 者:UMVSoft整理 ID:1445 城市:上海
摘 要:《关于“四舍五入”总结》
正 文:
《关于“四舍五入”总结》
=================================
最近做了个工资,发现误差,就是因为所得税的小数部分引起。查旧贴并实验,总结如下:
在 SQL 语句做四舍五入:
1: rount(a+0.00001,2)
2: int(a*100+.5)/100
3: FORMat(a,"###0.00")
1、2、3都可以
在VBA 里,只有23可以,1 不行。
函数ROUND 做四舍五入有误差,如round(1.00500,2)=1,而不是1.01
不知道是否正确,请大家指正。
Public Function my45(a As Double, n As Integer) As Double
my45 = Int(a * 10 ^ n + 0.51 ) / 10 ^ n
End Function
--------------------------------------------------------------
? My45 (1.005,2)
1.01
以下是我的四舍五入的函数,专用与计量认证的数据处理。供大家参考!
规则:1 保留小数点后两位有效数字(以小数点后,第一个非零数算起两位数字)
2 四舍六入五奇偶:“五奇偶”是指第三位有效数为5时,要看第二位的奇偶属性
奇数进,偶数舍
举例:11.00155 ----> 11.0016
11.00165 ----> 11.0016
11.135 ----> 11.14
11.500 ----> 11.50
11.550 ----> 11.55
11.56001 ----> 11.56 *只要有非零尾数,无论奇偶都要进位
----------------------------------
Public Function cmcrnd(anumber As Double) As Double
anumber = Int(anumber * 10 ^ 6) / 10 ^ 6
Dim a As Double
Dim a1, n As Byte
Dim t As String
n = 0
a = anumber
t = Mid(Trim(Str(FORMatNumber(a - Int(a), 4, , , vbUseDefault))), 2)
For a1 = 1 To 4
If Mid(t, a1, 1) <> "0" Then
Exit For
Else: n = n + 1
End If
Next
If Eval(Right(Str(Int(a * 1000 * 10 ^ n)), 1)) > 5 And Eval(Right(Str(Int(a * 100000)), 2)) > 0 Then
a = Int(a * 100 * 10 ^ n + 1) / (100 * 10 ^ n)
Else:
If Eval(Right(Str(Int(a * 1000 * 10 ^ n)), 1)) = 5 Then
If Eval(Right(Str(Int(a * 100 * 10 ^ n)), 1)) Mod 2 = 0 Then
a = Int(a * 100 * 10 ^ n) / (100 * 10 ^ n)
Else: a = Int(a * 100 * 10 ^ n + 1) / (100 * 10 ^ n)
End If
Else: a = Int(a * 100 * 10 ^ n) / (100 * 10 ^ n)
End If
End If
Select Case no
Case 1
a = FORMatNumber(a, 3)
Case 2
a = FORMatNumber(a, 4)
Case 3
a = FORMatNumber(a, 5)
End Select
cmcrnd = a
End Function
以下是??的四舍五入的函数,专用与计量认证的数据处理。供大家参考!
规则:1 保留小数点后两位有效数字(以小数点后,第一个非零数算起两位数字)
2 四舍六入五奇偶:“五奇偶”是指第三位有效数为5时,要看第二位的奇偶属性
奇数进,偶数舍
举例:11.00155 ----> 11.0016
11.00165 ----> 11.0016
11.135 ----> 11.14
11.500 ----> 11.50
11.550 ----> 11.55
11.56001 ----> 11.56 *只要有非零尾数,无论奇偶都要进位
----------------------------------
Public Function cmcrnd(anumber As Double) As Double
anumber = Int(anumber * 10 ^ 6) / 10 ^ 6
Dim a As Double
Dim a1, n As Byte
Dim t As String
n = 0
a = anumber
t = Mid(Trim(Str(FORMatNumber(a - Int(a), 4, , , vbUseDefault))), 2) </P><P>For a1 = 1 To 4
If Mid(t, a1, 1) <> "0" Then
Exit For
Else: n = n + 1
End If
Next </P><P>If Eval(Right(Str(Int(a * 1000 * 10 ^ n)), 1)) > 5 And Eval(Right(Str(Int(a * 100000)), 2)) > 0 Then
a = Int(a * 100 * 10 ^ n + 1) / (100 * 10 ^ n)
Else:
If Eval(Right(Str(Int(a * 1000 * 10 ^ n)), 1)) = 5 Then
If Eval(Right(Str(Int(a * 100 * 10 ^ n)), 1)) Mod 2 = 0 Then
a = Int(a * 100 * 10 ^ n) / (100 * 10 ^ n)
Else: a = Int(a * 100 * 10 ^ n + 1) / (100 * 10 ^ n)
End If
Else: a = Int(a * 100 * 10 ^ n) / (100 * 10 ^ n)
End If
End If </P><P>Select Case no
Case 1
a = FORMatNumber(a, 3)
Case 2
a = FORMatNumber(a, 4)
Case 3
a = FORMatNumber(a, 5)
End Select
cmcrnd = a
End Function
Access软件网QQ交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- 统计当月之前(不含当月)的记录...(03.11)
- 【Access Inputbo...(03.03)
- 按回车键后光标移动到下一条记录...(02.12)
- 【Access Dsum示例】...(02.07)
- Access对子窗体的数据进行...(02.05)
- 【Access高效办公】上月累...(01.09)
- 【Access高效办公】上月累...(01.06)
- 【Access Inputbo...(12.23)
- 【Access Dsum示例】...(12.16)

学习心得
最新文章
- 仓库管理实战课程(9)-开发往来单...(04.02)
- 仓库管理实战课程(8)-商品信息功...(04.01)
- 仓库管理实战课程(7)-链接表(03.31)
- 仓库管理实战课程(6)-创建查询(03.29)
- 仓库管理实战课程(5)-字段属性(03.27)
- 设备装配出入库管理系统;基于Acc...(03.24)
- 仓库管理实战课程(4)-建表操作(03.22)
- 仓库管理实战课程(3)-需求设计说...(03.19)
- 仓库管理实战课程(2)-软件背景和...(03.18)
- 仓库管理实战课程(1)-讲师介绍(03.16)