如何在MS Access,VBA中进行舍入

Cur*_*che 12 excel ms-access rounding worksheet-function access-vba

什么是在VBA Access中进行回合的最佳方式?

我目前的方法使用Excel方法

Excel.WorksheetFunction.Round(...
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一种不依赖于Excel的方法.

Lan*_*rts 25

小心,VBA Round函数使用Banker的舍入,它将.5舍入为偶数,如下所示:

Round (12.55, 1) would return 12.6 (rounds up) 
Round (12.65, 1) would return 12.6 (rounds down) 
Round (12.75, 1) would return 12.8 (rounds up)   
Run Code Online (Sandbox Code Playgroud)

而Excel工作表功能回合,总是向上舍入.5.

我做了一些测试,它看起来像.5向上舍入(对称舍入)也用于单元格格式化,也用于列宽舍入(当使用通用数字格式时).'精确显示'标志似乎不会进行任何舍入,它只使用单元格格式的舍入结果.

我尝试在VBA中实现Microsoft的SymArith函数进行舍入,但是当你尝试给它一个像58.55这样的数字时,发现Fix有错误.函数给出58.5而不是58.6的结果.然后我终于发现你可以使用Excel工作表Round函数,如下所示:

Application.Round(58.55,1)

这将允许您在VBA中进行正常的舍入,尽管它可能不如某些自定义函数快.我意识到问题已经完全循环,但是想要将其包含在内以便完整.


Fio*_*ala 9

在接受的答案上稍微扩展一下:

"Round函数执行round到even,这不同于round到large."
- 微软

格式总是向上舍入.

  Debug.Print Round(19.955, 2)
  'Answer: 19.95

  Debug.Print Format(19.955, "#.00")
  'Answer: 19.96
Run Code Online (Sandbox Code Playgroud)

ACC2000:使用浮点数时舍入错误:http://support.microsoft.com/kb/210423

ACC2000:如何按所需增量向上或向下舍入数字:http://support.microsoft.com/kb/209996

圆函数:http://msdn2.microsoft.com/en-us/library/se6f2zfx.aspx

如何实现自定义舍入过程:http://support.microsoft.com/kb/196652