|
|
|
一个隐藏了十年的Bug
jangogo @ 2010-6-11 21:28:00
这是一个四舍五入函数:
- Public Function Round45(Numer As Variant, DigitsNum As Long) As Variant
- On Error Resume Next
- Dim n As Double
- n = CDbl(CStr(Numer))
-
- Round45 = 0
- Round45 = Int(cdbl((n * 10 ^ DigitsNum) + 0.5)) / 10 ^ DigitsNum
- end function
一直以来工作得很好,直到今天有同事在做成本核算模块时,发现 当处理 数据为 4.895 这个数字要保留两位小数时,结果居然是4.89!
更改 Int(cdbl(.....里面的 cdbl 为 val 问题就解决了。
我想原因是VB对数据类型转换时,数据空间的分配可能存在问题。
|