• ベストアンサー

access  int関数

ACCESS2000を利用しています。 フォームでテーブルのデータを集計していますが、 =int([面積]*[単価])として 面積=9.62 単価=300 の場合2,885と表示され 正しい2,886が表示されません。他のものは正しく表示されています。 小数点以下を切り捨てたいだけなので =rounddown(([面積]*[単価]),0)としたいところなのですが これだと#name?となってしまいます。 int又はroundのどこかを間違っているのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • JAWS55
  • ベストアンサー率38% (176/452)
回答No.1

面積=9.62 で 面積のデータ型が浮動小数点型になっているので計算結果が2,885になっています。 データ型を通貨型(Currency)または十進数型(Decimal)にして計算をして下さい。

s-star
質問者

お礼

ありがとうございます。十進数型に変更することにより 正しい数字になりました。

その他の回答 (2)

noname#140971
noname#140971
回答No.3

丸め誤差対策は、No1の方が書かれていますので割愛します。 ここでは、四捨五入、切り上げ、切り捨ての関数だけを紹介しておきます。 [イミディエイト] ? ccur(9.62) * ccur(300) 2886 ? ccur(9.62) * ccur(301) 2895.62 ? Rounds(ccur(9.62) * ccur(301), 切り捨て) 2895 ? Rounds(ccur(9.62) * ccur(301), 四捨五入) 2896 ? Rounds(ccur(9.62) * ccur(301), 切り上げ) 2896 ここでは、Rounds関数を利用しています。 Public Const 四捨五入 = 0 Public Const 切り捨て = 1 Public Const 切り上げ = 2 Public Function Rounds(ByVal M As Currency, _             ByVal A As Integer, _             Optional D As Integer = 0) As Variant     Rounds = Sgn(M) * Fix(Abs(M) * 10 ^ D + Abs((A = 0) * 0.5@ + (A = 2) * (Int(M * 10 ^ D) <> (M * 10 ^ D)))) / 10 ^ D End Function ? Rounds(ccur(9.62) * ccur(301), 切り捨て,1) 2895.6 ? Rounds(ccur(9.62) * ccur(301), 四捨五入,1) 2895.6 ? Rounds(ccur(9.62) * ccur(301), 切り上げ,1) 2895.7 このように、Rounds関数では小数点の位置も指定できます。 ただ、切り上げ処理の場合、Rounds関数の場合に注意が必要です。 0.00000001 を切り上げるべきかどうかという問題があります。 一旦、有効桁数以下は切り捨ててから切り上げするかどうかはそれぞれのシステムの考え方です。 Access には、かような Excel風の関数がありません。 そこで、Excel風の関数の例を紹介した次第です。

s-star
質問者

お礼

具体的な事例あげていただきありがとうございます。 コピペして保存しておきます。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

まず第1にAccess2000にRoundDown関数やRoundUp関数はありません。 ユーザー定義関数を作られたのなら別ですけど Round関数もExcelとは結果が異なると思います。 多分ですが [面積]を数式で出してませんか? [面積]=[高さ]*[幅] ならば [面積]=Int([高さ]*[幅]*100+0.5)/100 で小数点第2位で四捨五入してみてください。

s-star
質問者

お礼

最初にググってみたとき2000以降ならround関数が使える との情報があったため試してみました。 おっしゃられるようにビルドでもroundないですね。。。

関連するQ&A