VisualBasic.NETでは、Double型等の小数点のあるものを変換すると、切り捨てられずに銀行丸めになる。
C#では、12345.9999といった小数点をint型に変換すると、小数点以下は切り捨てられて12345となる。
しかし、VB.NETでは12346となる。
Dim tInt0 As Integer = CInt("12345.999999") '12346 Dim tInt1 As Integer = Integer.Parse("12345.0000") 'エラーになる Dim tInt2 As Integer = CType(Double.Parse("12345.9999999"), Integer) '12346 Dim tInt3 As Integer = Math.Floor(Double.Parse("-12345.999999")) '-123456 Dim tInt4 As Integer = Math.Truncate(Double.Parse("12345.999999")) '12345
文字列を直接CIntでコンバートしていたあたりから、なんだかたまに不明な挙動をするので、色々とテストしてみた。
なんで、こんな仕様にしたのかは知らないが、知らないでC#と同じように考えているとやられる。
たんに、小数点以下を切り捨てたい場合は、Double型をTrancateするのがベストだと思う。