Dot-Net
CInt 不會一致地舍入 Double 值 - 如何刪除小數部分?
我偶然發現了CInt的問題並將雙精度轉換為整數。
問題如下:
CInt(10.5) 'Result is 10 CInt(10.51) 'Result it 11, but I expected 10...我習慣了 C# 樣式轉換,那裡
(int) 10.51是 10。正如關於Integer.Parse vs CInt的問題所指出的那樣,結果只是以某種方式四捨五入。
但是,我只需要獲取整數部分並丟棄小數部分。如何在 VB.NET 中實現這種類型的轉換?經過一些研究,我發現我可以使用該
Fix()功能來解決問題,但它是最佳選擇嗎?
您可以使用
IntorFix函式,但這些函式的返回值類型是 double 因此您必須將其轉換為 Integer ifoption strictison。no = Convert.ToInt32(Int(10.51))
首先,您在 C# 中的假設
CInt是不正確的。(int)其次, 的捨入行為
CInt不是隨機分配的——它實際上使用“銀行家四捨五入”:小數部分。將非整數值轉換為整數類型時,整數轉換函式(CByte、CInt、CLng、CSByte、CShort、CUInt、CULng 和 CUShort)會刪除小數部分並將值四捨五入為最接近的整數。
如果小數部分正好是 0.5,整數轉換函式會將其四捨五入到最接近的偶數整數。例如,0.5 舍入為 0,1.5 和 2.5 都舍入為 2。這有時稱為銀行家舍入,其目的是補償在將許多此類數字相加時可能累積的偏差。
(int)與在 C# 中使用的最佳等價物是命名空間中的Fix函式,該函式VisualBasic向零舍入(與 相同Math.Truncate)。但是,這會返回一個 Double 值,因此您必須進行進一步的轉換才能使用
CInt.CInt(Fix(10.5)) '10 CInt(Fix(10.51)) '10 CInt(Fix(11.5)) '11 CInt(Fix(-10.5)) '-10 CInt(Fix(-10.51)) '-10 CInt(Fix(-11.5)) '-11