邊長(1) = 15
邊長(2) = 21.213
邊長(3) = 15
MsgBox(Math.Round((邊長(3) ^ 2 + 邊長(1) ^ 2) ^ 0.5, 3) &
vbNewLine & 邊長(2) & vbNewLine & "是否相等:" &
IIf(Math.Round((邊長(3) ^ 2 + 邊長(1) ^ 2) ^ 0.5, 3) = 邊長(2), "true", "fels"))
這數值一樣...
結果卻是...
剛剛測試你的問題~
是Single比對Double型別,會是false狀態
Dim 邊長(3) As Single
邊長(1) = 15
邊長(2) = 21.213
邊長(3) = 15
MsgBox(Math.Round((邊長(3) ^ 2 + 邊長(1) ^ 2) ^ 0.5, 3) &
vbNewLine & 邊長(2) & vbNewLine & "是否相等:" &
IIf(Math.Round((邊長(3) ^ 2 + 邊長(1) ^ 2) ^ 0.5, 3) = Math.Round(邊長(2), 3), "true", "fels"))
邊長(3) = 21.213
MsgBox(Math.Round(邊長(3), 3) & vbNewLine & 邊長(2) & vbNewLine & "是否相等:" &
IIf(Math.Round(邊長(3), 3) = 邊長(2), "true", "fels"))
是否只是看起來一樣
差在形態上?
試試先將結果和被比較的數值統一轉型成float或其他試試?
邊長(1) = 15
邊長(2) = 21.213
邊長(3) = 15
MsgBox(Math.Round((邊長(3) ^ 2 + 邊長(1) ^ 2) ^ 0.5, 3) &
vbNewLine & 邊長(2) & vbNewLine & "是否相等:" &
IIf(CDec(Math.Round((邊長(3) ^ 2 + 邊長(1) ^ 2) ^ 0.5, 3)) = CDec(邊長(2)), "true", "false"))
個人測試
我直接宣告三個數字
Dim a = 15
Dim b = 21.213
Dim c = 15
MsgBox(Math.Round((c ^ 2 + a ^ 2) ^ 0.5, 3) & vbNewLine & b & vbNewLine & "是否相等:" & IIf(Math.Round((c ^ 2 + a ^ 2) ^ 0.5, 3) = b, "true", "false"))
答案是true
所以應該是你的邊長1 2 3 型態的問題
處理浮點數(float / double)的時候要很小心。
簡單一個問題,請問以下這行會得到什麼?
Debug.Print ((0.1 + 0.2) - 0.3);
你可以看看這篇微軟官方的文章:
https://docs.microsoft.com/zh-tw/dotnet/api/system.double.equals?view=netframework-4.8
或是找找其他人寫好的函式來比較浮點數是否相等/很接近