2006.01.19 Thursday
VB6での「端数処理」の復習
VB6において、丸め関数は"INT","FIX","ROUND"があります。
このうち、"ROUND"は「最も近い偶数に丸める」という四捨五入であり、一般的なものとは違います(よく嵌るワナ)。
さらに、"INT"と"FIX"はともに「切捨て」です。
"INT"と"FIX"の違いは、負数時に現れます。
INT:負数時には絶対値の大きい側に寄せられる
FIX:負数時には絶対値の小さい側に寄せられる
これらの性質を理解したうえで、自作関数として「四捨五入」や「切り上げ」を作成するのがよいでしょう。
また、型変換関数(CIntとか)や暗黙の型変換は、内部で"Round"しているようです。したがって、期待する四捨五入が得られないことが多いです。
とにかくやってはいけないのは…
・盲目的に型変換/Roundを信じること
・さらに、型変換元/Roundの引数に、強引に"0.0001"なんて加算してみること
ここをしっかり理解しておかないと、いくら精度のよいデータ型を使ったところで無意味になってしまいます。
ちゃんと理解して使いましょう。
(実験結果を載せようと思ったけど、すごい行数になったので止めました…)
このうち、"ROUND"は「最も近い偶数に丸める」という四捨五入であり、一般的なものとは違います(よく嵌るワナ)。
さらに、"INT"と"FIX"はともに「切捨て」です。
"INT"と"FIX"の違いは、負数時に現れます。
INT:負数時には絶対値の大きい側に寄せられる
FIX:負数時には絶対値の小さい側に寄せられる
これらの性質を理解したうえで、自作関数として「四捨五入」や「切り上げ」を作成するのがよいでしょう。
また、型変換関数(CIntとか)や暗黙の型変換は、内部で"Round"しているようです。したがって、期待する四捨五入が得られないことが多いです。
とにかくやってはいけないのは…
・盲目的に型変換/Roundを信じること
・さらに、型変換元/Roundの引数に、強引に"0.0001"なんて加算してみること
ここをしっかり理解しておかないと、いくら精度のよいデータ型を使ったところで無意味になってしまいます。
ちゃんと理解して使いましょう。
(実験結果を載せようと思ったけど、すごい行数になったので止めました…)






















