|
晚上, 在寫個小程式, 花了約四小時, 發現此一奇怪的狀況:
VB6 int() Function 在處理 Double 形態時會有些狀況, 請注意.
請看此程式片段: ( GiveMeInt() 是我後來寫的補充函式 )
Private Sub Command2_Click()
Dim A As Single
Dim B As Single
Dim C As Single
Dim D As Single
Dim E As Single
A = 0.000005
B = 2.30001
C = B / A
D = Int(C)
E = GiveMeInt(CDbl(C))
Debug.Print "C:" & CStr(C) & " D:" & CStr(D) & " E:" & CStr(E)
End Sub
Debug 出來的結果, 正常!
C:460002 D:460002 E:460002
但, 把所有變數換成 Double 後!
Private Sub Command1_Click()
Dim A As Double
Dim B As Double
Dim C As Double
Dim D As Double
Dim E As Double
A = 0.000005
B = 2.30001
C = B / A
D = Int(C)
E = GiveMeInt(C)
Debug.Print "C:" & CStr(C) & " D:" & CStr(D) & " E:" & CStr(E)
End Sub
Debug 出來的結果, 有問題! D 的值應該是 460002, 但結果出來 460001?
C:460002 D:460001 E:460002
所以, 後來我自己寫了個 Function GiveMeInt() 來處理這種狀況.
Public Function GiveMeInt(InNumDB As Double) As Double
Dim TempStr1 As String
Dim A As Long
'先將數字轉為字串
TempStr1 = CStr(InNumDB)
A = InStr(1, TempStr1, ".")
If A > 0 Then
'有小數點
TempStr1 = Mid(TempStr1, 1, A - 1)
If InNumDB < 0 Then
TempStr1 = CStr(CLng(TempStr1) - 1)
End If
End If
GiveMeInt = CDbl(TempStr1)
End Function
有需要的話, 請自便!
嗯! 來推一下吧! :
|
林育德
 建立你的名片貼
|