2016年6月30日木曜日

VBAのRoundの罠

ROUND(38.5)
結果:38

ROUND(39.5)
結果:40

「銀行家の丸め (bankers' rounding)」、「銀行丸め」ともいう。
5が切り捨てられたり切り上げられたりするので「五捨五入」と呼ばれたり、
端数がちょうど0.5の場合に整数部分が偶数なら切り捨て奇数なら切り上げる
ので「偶捨奇入」と呼ばれたりもする。



本当の「四捨五入」したい場合は

WorksheetFunction.Round()

が有効だそうです。
しかし、ADODB,Jet.OLEDBなどでQuery(クエリー)で運用時は使えないので

sql = "UPDATE MyTable SET `Ammount` = ROUND(35*1.1)"
Call csv_cn.Execute(sql)

=ROUND(38.5) = 38



sql = "UPDATE MyTable SET `Ammount` = FORMAT(35*1.1,""#"")"
Call csv_cn.Execute(sql)

=ROUND(38.5) = 39

ちなみに、小数点以下2位の四捨五入は

sql = "UPDATE MyTable SET `Ammount` = FORMAT(35*1.111,""#.00"")"
Call csv_cn.Execute(sql)




0 件のコメント:

コメントを投稿