« [R]エンコードを指定する際の文字を調べる(使用できるエンコードの一覧を表示する) | トップページ | [Excel]数値を四捨五入する »

2014年6月21日 (土)

[Visual Basic]四捨五入を行う

Math.roundメソッドにMidpointRounding.AwayFromZeroオプションを使えば四捨五入が行えることになっているが、丸める数値がDouble型の場合、うまくいかないことがあるため要注意。確実に四捨五入を行うには、数値をDecimal型にしたほうがよい。

Double型でも特にエラーは発生せずに使用できるが、MSDNのサンプルプログラムではDecimal型で行っている。

プログラム例

Dim dbl As Double
Dim dec As Decimal

' とりあえずDouble型で四捨五入を試してみる
' 手計算ではそれぞれ1.3、1.4になり、そのとおり出力される
dbl = 1.25
Console.WriteLine(CStr(Math.Round(dbl, 1, MidpointRounding.AwayFromZero)))
dbl = 1.35
Console.WriteLine(CStr(Math.Round(dbl, 1, MidpointRounding.AwayFromZero)))

' 複雑な式の結果を四捨五入してみる
' 手計算では20.1113になるはずだが、出力結果は20.1112となり四捨五入されていない
dbl = (Math.Abs(20.11125) + Math.Abs(20.11125)) / 2
Console.WriteLine(CStr(Math.Round(dbl, 4, MidpointRounding.AwayFromZero)))

' 同じことをDecimal型で試してみる、出力結果は20.1113になる
dec = (Math.Abs(20.11125D) + Math.Abs(20.11125D)) / 2
Console.WriteLine(CStr(Math.Round(dec, 4, MidpointRounding.AwayFromZero)))

出力

1.3
1.4
20.1112
20.1113

« [R]エンコードを指定する際の文字を調べる(使用できるエンコードの一覧を表示する) | トップページ | [Excel]数値を四捨五入する »

Visual Basic」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« [R]エンコードを指定する際の文字を調べる(使用できるエンコードの一覧を表示する) | トップページ | [Excel]数値を四捨五入する »

無料ブログはココログ

■■

■■■