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)