Accessを使っていて、小数点以下を四捨五入して整数で表示することはよくあると思います。
そこでよく使われているのが、Round関数。
Accessのヘルプにもこう書かれています(2007の場合)
小数点以下の指定された桁以下を四捨五入した数値を返します。
構文
Round(expression [, numdecimalplaces ] )
Round 関数には、次の引数があります。
| 引数 |
説明 |
| expression |
必ず指定します。四捨五入を行う(数式 : 数値で評価する式です。数式は、変数、定数、関数、および演算子を任意に組み合わせて指定できます。)を指定します。 |
| numdecimalplaces |
省略可能です。四捨五入する小数点以下の桁数を表す数値を指定します。省略すると、最も近い整数に丸められます。 |
でも、実際にやってみると違うんですよねぇ・・・
[2回]
で、実際にやってみます。
まず、[テーブル1]を作成し、フィールド[数字]とします。
[数字]のデータ型は数値型で、データサイズを倍精度浮動小数点型を選択します。
で、以下のようにデータを入力します。
テーブル1
| 数字 |
| 1.1 |
| 1.2 |
| 1.3 |
| 1.4 |
| 1.5 |
| 1.6 |
| 1.7 |
| 1.8 |
| 1.9 |
| 2 |
| 2.1 |
| 2.2 |
| 2.3 |
| 2.4 |
| 2.5 |
| 2.6 |
| 2.7 |
| 2.8 |
| 2.9 |
| 3 |
| 0.1 |
| 0.2 |
| 0.3 |
| 0.4 |
| 0.5 |
| 0.6 |
| 0.7 |
| 0.8 |
| 0.9 |
| 1 |
次に、クエリー1を作成します。
選択するテーブルは、さきほどの、「テーブル1」。フィールドは、「テーブル1」の「数字」と、その横のフィールドに、Round関数を使ったフィールドを作ります。
Round: Round([テーブル1].[数字])
で、実行してみると・・・・
クエリ1
| 数字 |
Round |
| 0.1 |
0 |
| 0.2 |
0 |
| 0.3 |
0 |
| 0.4 |
0 |
| 0.5 |
0 |
| 0.6 |
1 |
| 0.7 |
1 |
| 0.8 |
1 |
| 0.9 |
1 |
| 1 |
1 |
| 1.1 |
1 |
| 1.2 |
1 |
| 1.3 |
1 |
| 1.4 |
1 |
| 1.5 |
2 |
| 1.6 |
2 |
| 1.7 |
2 |
| 1.8 |
2 |
| 1.9 |
2 |
| 2 |
2 |
| 2.1 |
2 |
| 2.2 |
2 |
| 2.3 |
2 |
| 2.4 |
2 |
| 2.5 |
2 |
| 2.6 |
3 |
| 2.7 |
3 |
| 2.8 |
3 |
| 2.9 |
3 |
| 3 |
3 |
あれあれ?ですよね。0.5の小数点以下を四捨五入すると1のはずですし、2.5の場合は3のはず・・・。
でも、切り捨てられています。でも、1.5はちゃんと2になっている。
引数をいれたらどうなるか?
Round: Round([テーブル1].[数字],0) とやっても同じ結果でした。
なぜそうなるかは私はわからなかったのですが、
こちらで詳しく説明されています。
(
ITコンサルタント 市井賢児のメモ)
あれはあれであっているということですが、だったらヘルプの「四捨五入」という書き方はやめてもらいたいものです。
では、小数点以下を四捨五入し整数値にしたい場合はどうするのか?
さきほどのクエリーに次のフィールドを追加します。
Int: Int([テーブル1].[数字]+0.5)
で、結果はこちら
クエリ1
| 数字 |
Round |
Int |
| 0.1 |
0 |
0 |
| 0.2 |
0 |
0 |
| 0.3 |
0 |
0 |
| 0.4 |
0 |
0 |
| 0.5 |
0 |
1 |
| 0.6 |
1 |
1 |
| 0.7 |
1 |
1 |
| 0.8 |
1 |
1 |
| 0.9 |
1 |
1 |
| 1 |
1 |
1 |
| 1.1 |
1 |
1 |
| 1.2 |
1 |
1 |
| 1.3 |
1 |
1 |
| 1.4 |
1 |
1 |
| 1.5 |
2 |
2 |
| 1.6 |
2 |
2 |
| 1.7 |
2 |
2 |
| 1.8 |
2 |
2 |
| 1.9 |
2 |
2 |
| 2 |
2 |
2 |
| 2.1 |
2 |
2 |
| 2.2 |
2 |
2 |
| 2.3 |
2 |
2 |
| 2.4 |
2 |
2 |
| 2.5 |
2 |
3 |
| 2.6 |
3 |
3 |
| 2.7 |
3 |
3 |
| 2.8 |
3 |
3 |
| 2.9 |
3 |
3 |
| 3 |
3 |
3 |
この、0.5を足すやりかたはよくCOBOLでもやるので私としてはこちらのほうがしっくりきます。
(ちなみに切り上げは0.9を足す)
じゃぁ、Excelは?よく、四捨五入するにはRound使いなさいと教えているが・・・・。
数字セルの横に、=Round(A2,0)という数式を入れて、あとはコピー・・・・。
結果はこうなりました。
| 数字 |
Round |
| 0.1 |
0 |
| 0.2 |
0 |
| 0.3 |
0 |
| 0.4 |
0 |
| 0.5 |
1 |
| 0.6 |
1 |
| 0.7 |
1 |
| 0.8 |
1 |
| 0.9 |
1 |
| 1 |
1 |
| 1.1 |
1 |
| 1.2 |
1 |
| 1.3 |
1 |
| 1.4 |
1 |
| 1.5 |
2 |
| 1.6 |
2 |
| 1.7 |
2 |
| 1.8 |
2 |
| 1.9 |
2 |
| 2 |
2 |
| 2.1 |
2 |
| 2.2 |
2 |
| 2.3 |
2 |
| 2.4 |
2 |
| 2.5 |
3 |
| 2.6 |
3 |
| 2.7 |
3 |
| 2.8 |
3 |
| 2.9 |
3 |
| 3 |
3 |
ん?四捨五入されている・・・。
AccessのRound関数と、ExcelのRound関数は違うのか??
謎は深まるばかりです・・・・。
え?じゃぁ、VBは? VB6で試してみます。
Private Sub Command1_Click()
Dim A As Double
Dim B As Double
A = 0
Do Until A > 3
A = A + 0.1
B = Round(A, 0)
Text1.Text = Text1.Text + Format(A, "0.0") + " " + Format(B, "0.0") + vbCrLf
Loop
End Sub
で、結果は
数字 Round
0.1 0.0
0.2 0.0
0.3 0.0
0.4 0.0
0.5 0.0
0.6 1.0
0.7 1.0
0.8 1.0
0.9 1.0
1.0 1.0
1.1 1.0
1.2 1.0
1.3 1.0
1.4 1.0
1.5 2.0
1.6 2.0
1.7 2.0
1.8 2.0
1.9 2.0
2.0 2.0
2.1 2.0
2.2 2.0
2.3 2.0
2.4 2.0
2.5 3.0
2.6 3.0
2.7 3.0
2.8 3.0
2.9 3.0
3.0 3.0
うーん・・・・。謎は深まるばかりです。
PR