鉴于像499,73433,2348这样的数字,我可以使用什么VBA来舍入到最接近的5或10?或任意数字?
5点:
499 -> 500 2348 -> 2350 7343 -> 7345
到10:
499 -> 500 2348 -> 2350 7343 -> 7340
等等
这是简单的数学.给定数字X和舍入因子N,公式为:
圆形(X/N)*N.
综合答案
X = 1234 'number to round N = 5 'rounding factor round(X/N)*N 'result is 1235
对于浮点到整数,1234.564到1235,(这是VB特定的,大多数其他语言只是截断)做:
int(1234.564) 'result is 1235
注意: VB使用Bankers Rounding,到最近的偶数,如果你不知道它可能会令人惊讶:
msgbox round(1.5) 'result to 2 msgbox round(2.5) 'yes, result to 2 too
谢谢大家.
舍入到最近的X(没有特定于VBA)
N = X*int(N/X + 0.5)
其中int(...)返回下一个最低整数.
如果您的可用舍入函数已经舍入到最接近的整数,则省略添加0.5
在VB中,math.round有额外的参数来指定小数位数和舍入方法. Math.Round(10.665,2,MidpointRounding.AwayFromZero)将返回10.67.如果数字是十进制或单个数据类型,math.round将返回十进制数据类型.如果是double,则返回double数据类型.如果选项严格打开,这可能很重要.
(10.665).ToString("n2")的结果从零开始舍入到"10.67".如果没有其他参数,math.round将返回10.66,这可能会导致不必要的差异.