一个隐藏了十年的Bug
(创建时间:2010年06月12日 05:28:00)
Jangogo : 
这是一个四舍五入函数:
 
  1. Public Function Round45(Numer As Variant, DigitsNum As LongAs Variant     ''真正的四舍五入   
  2. On Error Resume Next  
  3. Dim n As Double  
  4. n = CDbl(CStr(Numer))   
  5. 'n = CDbl(Numer)   
  6. Round45 = 0   
  7. Round45 = Int(cdbl((n * 10 ^ DigitsNum) + 0.5)) / 10 ^ DigitsNum    
  8. end function  

一直以来工作得很好,直到今天有同事在做成本核算模块时,发现 当处理 数据为 4.895 这个数字要保留两位小数时,结果居然是4.89!

更改 Int(cdbl(.....里面的 cdbl 为 val 问题就解决了。

我想原因是VB对数据类型转换时,数据空间的分配可能存在问题。
文档中心