切り捨てMath.Truncate [VB]

Visual Basic 文法[2015 2013 2012]

小数点以下を切り捨て

Math.Truncateメソッドは、引数に指定した数値以下の最大整数、つまり小数点以下の数値を切り捨てた整数値、つまり0に最も近い整数値を返します。

  Math.Truncate(12.5)      '  12
  Math.Truncate(-12.5)     ' -12
  Math.Truncate(5.123)     '  5
  Math.Truncate(-5.123)    ' -5
  Math.Truncate(0)         '  0

Visual Basicでは、切り捨てと切り下げは同義ではありません。たとえば、マイナス数値-7.5の場合、次のようになります。

切り捨てMath.Truncate(-7.5)は、-7 、切り下げMath.Floor(-7.5)は -8、です。

切り下げ Math.Floorメソッド

Math.Floorメソッドは、引数に指定した数値以下の最大整数値を返します。

Math.Truncateメソッドの引数は、Double型または、Decimal型のいずれかにします。Double型を使うと誤差が出て、思わぬ結果になることがあります。誤差が出ると困るようなら、Decimal型を使います。

  ' 切り捨てによる税込価格を計算
  Dim taxRate As Decimal = 0.08D  ' Dを付けないとDouble型
  Dim hontai As Decimal = 140
  Dim zeikomi As Decimal = hontai * (1 + taxRate)

  Console.WriteLine(Math.Truncate(zeikomi))     ' 151

Math.Truncateメソッドでは、引数に指定した数値の整数値切り捨て機能しかありません。小数点以下や1の位以上を切り捨てる時は、少し工夫する必要があります。

  ' 小数第二位を切り捨て
  Dim suuti As Decimal = 1.35D  ' Dを付けないとDouble型

  ' 10倍してMath.Truncateで切り捨て、その後10で割る
  Dim kekka As Decimal = Math.Truncate(suuti * 10D) / 10D

  Console.WriteLine(kekka)       ' 1.3

Math.Truncateメソッドのサンプルプログラム

Math.Truncateメソッドを使ったサンプルプログラムを作成します。

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

Module Module1

    Sub Main()
        ' 変数の宣言
        Dim inStr As String = ""
        Dim inNum As Decimal = 0
        Dim anser As Decimal = 0

        Do
            Console.WriteLine("endを入力すると終了します")
            ' キーボードから入力
            Console.WriteLine("切り捨てる数値を入力してください")
            inStr = Console.ReadLine()
            If inStr = "end" Then
                ' endを入力したら、Exit Doで、Loopを抜ける
                Exit Do
            End If

            ' IsNumeric関数で入力数値チェック
            ' エラーがなければ数値に変換
            If IsNumeric(inStr) = True Then
                ' Decimal型数値に変換
                inNum = Decimal.Parse(inStr)
                ' Math.Truncateを使って切り捨て
                anser = Math.Truncate(inNum)
                ' 切り捨て結果の表示
                Console.WriteLine()
                Console.WriteLine("切り捨て結果:" & anser)
                Console.WriteLine()
            End If
        Loop
    End Sub

End Module
[広告]