- ベストアンサー
ACCESSのバグ?
たびたびの質問大変申し訳ありません。 ACCESSのクエリデザイナにて、フィールド項目で計算を打ち込んでいるのですが、小数点切捨てがどうもうまく動きません。 式は以下のようなものです Cint(年齢計算の式) 年齢計算の結果は小数になりますが、どうもこれを切り上げてくれているようなのです。 ROUND(年齢計算の式,0) とやっても結果は同じでした。 いろいろためした結果は以下のような感じです Cint(10.5) → 10 Cint(11.5) → 12 Cint(100.5) → 100 Cint(101.5) → 102 1の位が0だと切り捨て、それ以外だと切り上げになるのでしょうか? う~む、ACCESSは本当使いにくいですね。。。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
[イミディエイト] ? Rounds(10.5,四捨五入) 11 ? Rounds(10.5,切り捨て) 10 ? Rounds(10.5,切り上げ) 11 ? Rounds(10.4,四捨五入) 10 ? Rounds(10.4,切り捨て) 10 ? Rounds(10.4,切り上げ) 11 ? Rounds(10.4445,切り捨て,3) 10.444 ? Rounds(1110.4445,切り捨て,-3) 1000 Accessには、このような四捨五入、切り捨て、切り上げ関数はありません。 ならば、自作するという手があります。 ' ' 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関数です。 で、この関数でおよそのノウハウは判ります。 ですから、ちょっと Rounds関数の自作に挑戦されたらどうでしょうか?
その他の回答 (4)
> ひどい・・・ > そんな機能誰がのぞむのでしょうかね。。 これって、単に質問者さんが関数を間違えているだけなのでは? 「切り捨て」をしたいなら、Cint関数ではなく、Int関数です。 #3さんの言われている、Fix関数との違いは、 Int(-1.3) → -2 Fix(-1.3) → -1 です。ご参考まで...
- bonaron
- ベストアンサー率64% (482/745)
CInt 関数は、丸めを行うものではなく 型変換のためのものです。 整数型に変換するのですが、 変換方法はアクセスまかせということになります。 他にも CLng、CDbl CCur 等々があります。 少数以下切捨てには、Int 関数、Fix 関数などを使います。 両者の違いなど、詳しくは、VBE のヘルプをご覧ください。
Round関数は銀行型の丸めをします。 Cint関数はもともと、数値を丸める関数ではなくて、データ型を整数型に変換する関数です。 四捨五入をするときは、自分で関数を作る必要があります。 例えば、小数点一位で四捨五入する場合、こんな風にできます。 Int(X+0.5) Int関数は小数点以下を切り捨てる関数です。 似たような関数に、Fix関数がありますが、負数を丸めるときの動作が違います。もし負数も扱うなら、ヘルプをみて、どちらを使うのが目的にあっているのか検討してください。
Cint関数は「最も近い偶数」に丸められるそうです。 参考まで…。
お礼
ひどい・・・ そんな機能誰がのぞむのでしょうかね。。 回答非常に助かりました、ありがとうございます。 もし、ばっさりと小数点以下を切り捨てる関数等ご存知でしたら教えていただけると助かります。
お礼
ありがとうございました、大変お世話になりましたm(__)m