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