最も近い整数に丸める [VB.NET]

Visual Basic.NET ADO.NETデータベースプログラミング

CInt関数・Fix関数・Int関数の違い

CInt関数は常に最も近い整数に値を丸めます。ところが、Fix関数とInt関数は、共に小数部分を切り捨てた整数値を戻します。

Fix関数とInt関数の丸め

小数部分が0.5の時に限り、最も近い偶数に値を丸めます。負数の場合は、戻値が異なります。

  Int関数の場合: Int(95 * 1.05)  --> 99
Fix関数の場合: Fix(95 * 1.05) --> 99
Int関数の場合: Int(-95 * 1.05) --> -100
Fix関数の場合: Fix(-95 * 1.05) --> -99

CInt関数の丸め

Option Strict Onの場合は、Double型からInteger型への暗黙の変換はできません。CInt関数でデータ型変換が必要です。

たとえば、95 * 1.05 ならば、次のようにします。

  CInt(Int(95 * 1.05))

CInt関数は常に最も近い整数に値を丸めますが、小数部分が、0.5の時に限り、最も近い偶数に値を丸めるので、四捨五入になりません。

  CInt(2.4) --> 2
  CInt(2.5) --> 2
  CInt(2.6) --> 3

CInt関数を使ったサンプルプログラム

次のサンプルプログラムでは、あらかじめ、先頭に Option Strict On を記述しておきます。こうしておけば、データに誤差が出なくなります。誤差が出るような演算をすると、エラーになり、プログラムを実行できません。

ソースリストの枠内をクリックすると全選択できます。

  Dim zeikomiGaku As Integer

  ' Int関数の場合:zeikomiGaku = 99
  zeikomiGaku = CInt(Int(95 * 1.05))
  Trace.WriteLine("CInt(Int(95 * 1.05)) = " + zeikomiGaku.ToString)

  ' Fix関数の場合:zeikomiGaku = 99
  zeikomiGaku = CInt(Fix(95 * 1.05))
  Trace.WriteLine("CInt(Fix(95 * 1.05)) = " + zeikomiGaku.ToString)

  ' Int関数の場合:zeikomiGaku = -100
  zeikomiGaku = CInt(Int(-95 * 1.05))
  Trace.WriteLine("CInt(Int(-95 * 1.05)) = " + zeikomiGaku.ToString)

  ' Fix関数の場合:zeikomiGaku = -99
  zeikomiGaku = CInt(Fix(-95 * 1.05))
  Trace.WriteLine("CInt(Fix(-95 * 1.05)) = " + zeikomiGaku.ToString)

  Trace.WriteLine("------------------------------------")

  ' CInt関数は常に最も近い整数に値を丸めますが、
  ' 小数部分が、0.5の時に限り、最も近い偶数に値を丸めます
  Trace.WriteLine("CInt(2.4)) = " + CInt(2.4).ToString)
  Trace.WriteLine("CInt(2.5)) = " + CInt(2.5).ToString)
  Trace.WriteLine("CInt(2.6)) = " + CInt(2.6).ToString)

  Trace.WriteLine("------------------------------------")

  Trace.WriteLine("CInt(-2.4)) = " + CInt(-2.4).ToString)
  Trace.WriteLine("CInt(-2.5)) = " + CInt(-2.5).ToString)
  Trace.WriteLine("CInt(-2.6)) = " + CInt(-2.6).ToString)