版友1978贵阳排长问题:根据测量方面的资料规定:数据处理后修约遵循的规则是四舍六入五看奇偶,即当要修约的数大于5,不管其前面的数是否为奇偶,均进1,当要修约的数小于5,不管其头面的数是否为奇偶,均舍去(这与数学上常归的四舍五入规定一致);当要修约的数等于5时,且其后没有数据,则其前面的数为偶,则舍去,其前面的数为奇数,则进1;当要修约的数等于5时,且其后有不为0的数据,不管其前面是否是奇偶数,均要进1;如果要保存的位数不够,修约后的数据用0补上。
------------------------------------------------------------------------------------
解法:
Function rdVal(val As Double, dec As Long) As Double
Dim num As Long
Dim n As Long
num = Int(val * 10 ^ (dec + 1)) - Int(val * 10 ^ dec) * 10
If num < 5 or num > 5 Then
rdVal = Round(val, dec)
Else
If val * 10 ^ (dec + 1) - Int(val * 10 ^ (dec + 1)) < 1 / 10 ^ 6 Then
n = Int(val * 10 ^ dec) - Int(val * 10 ^ (dec - 1)) * 10
If n Mod 2 = 0 Then
rdVal = Int(val * 10 ^ dec) / (10 ^ dec)
Else
rdVal = (Int(val * 10 ^ dec) + 1) / (10 ^ dec)
End If
Else
rdVal = Round(val, dec)
End If
End If
End Function
小数保留位补零问题为格式化输出问题用format解决,在此不论。
点击下载此附件