一共有两个问题,分别在代码中,请帮我看一样,问题的原因是浮点数的精度,但不知如何解决! Option Explicit Const SPGZ As Integer = 22070 '社平工资(2006年) Function 社会保险(nJfgz As Single, Optional nType As Integer) Const YlJfbl As Single = 0.08 '养老保险个人缴费比例 8% Const SyJfbl As Single = 0.01 '失业保险个人缴费比例 1% Const YlbxJfbl As Single = 0.02 '医疗保险缴费比例 2% '问题1:为什么将High定义为整形时,运行到(注1)是就退出,但如果定义为single时,就可以正常运行? ' Const High As Integer = 3 Const High As Single = 3 '缴费上限为社平工资的300% Const Low As Single = 0.6 '缴费下限为社平工资的60% Dim jfbl As Single '缴费比例(根据选择类型返回相应的个人缴纳保险额) Dim temp As Single '存放结果的临时变量 Select Case nType Case 0 '养老保险(默认值) jfbl = YlJfbl Case 1 '失业保险 jfbl = SyJfbl Case 2 '医疗保险 jfbl = YlbxJfbl End Select If nJfgz < SPGZ * Low Then temp = SPGZ * Low * jfbl / 12 '低于最低缴费基数 '(注1) ElseIf nJfgz > (SPGZ * High) Then '问题2:由于temp为浮点型,因此下面的语句运行后结果为55.17499924,四舍五入后结果为55.17, '如果把下面语句的全部变量直接用数值来替代,也就是22070*3*0.01/12,则结果为55.175,四舍五入后结果为55.18。 '这个问题应该如何解决? temp = SPGZ * High * jfbl / 12 '高于最高缴费基数 Else temp = nJfgz * jfbl / 12 End If 社会保险 = temp End Function
LKGwiGUr.rar
(7.43 KB, 下载次数: 9)
[此贴子已经被作者于2007-6-19 13:45:01编辑过] |