為什麼此 Logo 在我網頁上
好書佳句:

October 17, 2007

加入書籤: HemiDemi Del.icio.us furl Google Bookmarks Yahoo! My Web technorati

VB6 int() Function 在處理 Double 形態時會有些狀況, 請注意 ... ( 電腦不乖 )

晚上, 在寫個小程式, 花了約四小時, 發現此一奇怪的狀況:

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

有需要的話, 請自便!


嗯! 來推一下吧! :
推到 Twitter!
推到 Plurk!





林育德

建立你的名片貼
Royalty Free Images
圖庫搜尋 @ Dreamstime(英文):

MyHotPost
由 jason 發表於 October 17, 2007 11:56 PM | 引用

迴響
發表迴響













記住我的資訊?