Access VBA 質問スレ Part2 (788レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
700: 2023/10/03(火) 11:54:07.91 ID:BE4+HOMv(1/2)調 AAS
ちょっと不思議な話
よくある数値の切捨て処理のfunctionとして
Function RoundDownDec(decNum as Currency, intPlace as Integer) as Currency
RoundDownDec = Fix(decNum * 10 ^ intPlace) / 10 ^ intPlace
End Function
処理したいデータの都合で与える数値も戻り値も十進型としています
(正負の処理などは今回の本題から外れるので例からは省いています)
RoundDownDec(33.6, 2) としたときに、33.6が返ってくるのを期待しますが33.59が返ってきます
不思議!
functionの中身を
Dim tmp As Currency
tmp = Fix(decNum * 10 ^ intPlace)
Debug.Print tmp
RoundDownDec = tmp / 10 ^ intPlace
と段階を踏ませるとイミディエイトウィンドウに3359が出るので更に
tmp = decNum * 10 ^ intPlace
tmp = Fix(tmp)
と分解すると、期待通りの結果(33.6)が得られます
Fix()の引数はdoubleなんで、暗黙的な型変換が行われているせいなんだろうけれど、微妙に納得がいかない不思議な話でした
701: 2023/10/03(火) 11:59:45.89 ID:BE4+HOMv(2/2)調 AAS
ちなみに蛇足ですが、普通に
Function RoundDown(dblNum As Double, intPlace As Integer) As Double
とdoubleを引数にした場合は、特別なことをしなくても RoundDown(33.6, 2) の結果は33.6となります
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.046s