什麼時候cint和clng會一直四進到最接近的奇數

在Microsoft Visual Basic 中的 CIntCLng 函數是用來將變量或表達式轉換為整數類型的。CInt 將值轉換為短整型(Integer),而 CLng 將值轉換為長整型(Long)。

在 VB6 中,CIntCLng 會將浮點數(如 SingleDouble)四捨五入到最接近的整數。如果這個整數是偶數,它會被四捨五入到最接近的奇數。這種行為是因為 VB6 遵循 bankers rounding 的規則,這是一種在金融和科學計算中常用來減少 round-off 誤差的 rounding 方式。

例如,考慮以下轉換:

Dim x as Single
x = 1.5
Debug.Print CInt(x) ' 輸出: 2

因為 1.5 是最接近的偶數,所以 CInt(x) 會返回 2。但是,如果我們將 x 設置為 1.6,則會發生以下情況:

Dim x as Single
x = 1.6
Debug.Print CInt(x) ' 輸出: 2

因為 1.6 是最接近的奇數,所以 CInt(x) 會返回 2。這種行為可能會導致意外的結果,尤其是在進行大量 rounding 時。

在較新的版本中,如 Visual Basic .NET,CIntCLng 的行為已經改變。在 .NET 中,這些函數會將浮點數四捨五入到最接近的整數,而不考慮它是偶數還是奇數。這種行為更符合其他 programming 語言中的整數轉換。

例如,在 VB.NET 中:

Dim x as Single
x = 1.5
Debug.Print CInt(x) ' 輸出: 1

因為 1.5 是最接近的整數 1,所以 CInt(x) 會返回 1。這種行為在 .NET 中是預期的,並且在大多數情況下更為直觀。