看板 Visual_Basic 關於我們 聯絡資訊
↓以下是新手小弟寫的小程式↓ -------------------------------- Sub test() Dim i As Double, j As Double, k As Double Dim i1 As Double, i2 As Double, i3 As Double, j1 As Double, j2 As Double, j3 As Double, k1 As Double, k2 As Double, k3 As Double Worksheets("sheet1").Activate i1 = 3 i2 = 4 i3 = 0.02 j1 = 8 j2 = 9 j3 = 0.5 k1 = 1.5 k2 = 3 k3 = 0.5 For i = i1 To i2 Step i3 For j = j1 To j2 Step j3 For k = k1 To k2 Step k3 Worksheets("sheet1").Cells(1, 1).Value = i Worksheets("sheet1").Cells(1, 2).Value = j Worksheets("sheet1").Cells(1, 3).Value = k Next k Next j Next i End Sub -------------------------------- 我的問題是,我跑出來的結果一直卡在儲存格A1的值竟然是3.98而不是4? 所以請問各位先進這個問題是錯在哪?並請問該怎麼改呢? 此外,變數宣告我也曾經用過"single"可是儲存格A1的值更怪變成了3.99999 請問這是什麼原因呢? -- 麻煩大家指教了<(_ _)> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.223.97.36
LPH66:大概又是浮點數精確度.... 03/03 02:44
LPH66:前者也許3.98是3.98+ 所以加上0.02就超過4 03/03 02:44
LPH66:後者的3.98也許是3.98- 所以加上0.2還小於4 (變成4-) 03/03 02:45
LPH66:(上面的+ - 指比此數大一點點或小一點點) 03/03 02:45
LPH66: ↖0.02 更正 03/03 02:46
fumizuki:實際跑過一次,並沒有超過4,但是到4的時候會離開迴圈 03/03 07:04
fumizuki:不知道為什麼等於4會離開迴圈 03/03 07:05
fumizuki:試的結果浮點數才會有這個問題 03/03 07:06
fumizuki:迴圈結束點=最大值-遞增值 03/03 07:07
fumizuki:再試一次 不管用 for 還是 do loop 都一樣 03/03 07:31
fumizuki:在迴圈外輸出i 結果為4 輸出 i<=4 結果為true 03/03 07:32
fumizuki: False :x 03/03 07:33
fumizuki:輸出i>4 結果為 true 03/03 07:33
commiserate:使用 i3=1/50 試試看 03/03 09:01
LaDSi:用i=1/50跑出來是3.99999耶.... 03/03 12:21