VB.NETでのIntgerの変換は銀行丸めに注意

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するのがベストだと思う。

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>