【问题标题】:How to ROUNDUP a number in Access 2013?如何在 Access 2013 中对数字进行舍入?
【发布时间】:2015-08-13 05:27:25
【问题描述】:

对于 Access 2013,我需要一种方法将任何小数舍入到 SQL 查询中的下一个整数。

例子:

SELECT ROUNDUP(NumberValues) FROM Table1

在上面的查询中,1.25 的行在查询后应该返回为 2。

据我所知,Access 2013 中没有用于 SQL 查询语句的 ROUNDUP 函数。

【问题讨论】:

    标签: sql rounding ms-access-2013


    【解决方案1】:

    我从这个链接中找到了一个 ROUNDUP 等效项: http://allenbrowne.com/round.html#RoundUp

    要向上舍入到下一个最高数字,请利用 Int() 向下舍入负数的方式,如下所示: - Int( - [MyField])

    如上所示,Int(-2.1) 向下舍入为 -3。因此,此表达式将 2.1 向上舍入为 3。

    要向上取整,乘以 -100,四舍五入,然后除以 -100: Int(-100 * [MyField]) / -100

    语法是违反直觉的,但它完全符合我的预期。

    【讨论】:

      【解决方案2】:

      我发现在 access 中对数字进行四舍五入的最简单方法是使用这样的 round 函数:

      Round([MyField]+0.4,0)

      例如,数字 10.1 会变成 10.5。使用round函数时,向上取整到11。如果是10.9,加0.4变成11.3,取整到11。

      【讨论】:

      • 如果您处理的小数点多于一位,我认为这将不起作用。 0.01 + 0.4 = 0.41,仍然向下取整。我想你可以使用 0.499999999...
      【解决方案3】:

      优秀的答案'alextansc'。这个小小的公共功能很有效:

      Public Function GlblRoundup(wNumber As Currency, wDecPlaces As Integer)  As Currency
      
      Dim wResult As Currency
      Dim wFactor As Currency
      
          Select Case wDecPlaces
              Case 0
                  wFactor = -1
              Case 1
                  wFactor = -10
              Case 2
                  wFactor = -100
              Case 3
                  wFactor = -1000
              Case 4
                  wFactor = -10000
              Case Else
                  wFactor = -10000
          End Select
      
          wResult = Int(wFactor * wNumber) / wFactor
      
          GlblRoundup = Round(wResult, wDecPlaces)
      
      End Function
      

      【讨论】:

        【解决方案4】:

        这个也很好用

        Public Function roundUp(dValue As Double, idecimal As Integer) As Double
            Dim iSign As Integer
            If dValue < 0 Then
               iSign = -1
            Else
               iSign = 1
            End If
            dValue = Abs(dValue)
        
            If Round(dValue, 0) = 0 Then
                roundUp = 1 / 10 ^ idecimal * iSign
            Else
              roundUp = Round(dValue + 4 / 10 ^ (idecimal + 1), idecimal) * iSign
        
            End If
        

        结束函数

        示例综述 (10.333,2)=10.34

        【讨论】:

        • 不能正常工作(添加缺少的 End Function 语句后):roundUp(1.01, 1) 返回 1,但从我的角度来看应该返回 1.1。
        【解决方案5】:

        这里简单易懂:

        Public Function roundUp(ByVal theValue As Long) As Integer
            Dim tempInt As Integer
            tempInt = theValue 'cast value to whole integer
            If (tempInt = theValue) Then 'check if original value was already whole
                'do nothing
            Else
                tempInt = tempInt + 1 'value was not whole integer, add one to round up
            End If
            roundUp = tempInt 'return rounded value
        End Function
        

        注意: 在调用函数之前不要忘记检查你的值是否为空! 无论如何,这个函数都会将小数点到最大的小数点舍入到下一个整数!

        【讨论】:

          【解决方案6】:

          整数四舍五入的例子:

          If n > Round ( n, 0 ) then
              n = Round ( n, 0 ) + 1    
          Else    
              n = Round ( n, 0 )    
          End If
          

          【讨论】:

            【解决方案7】:

            您需要做的就是使用 圆形(字段+0.004999,2) 或者 圆形(字段+0.000499,3) ...

            【讨论】:

              【解决方案8】:
              Public Function GblRoundUp(wNumber As Double, wDecPlaces As Integer) As Double
                  Dim wResult As Double
                  Dim wFactor As Double
                  wFactor = -10 ^ wDecPlaces
                  wResult = Int(wFactor * wNumber) / wFactor
                  GblRoundUp = Round(wResult, wDecPlaces)
              End Function
              

              【讨论】:

              • 请添加解释以提高洞察力并为 OP 提供更多信息
              猜你喜欢
              • 1970-01-01
              • 2010-11-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-12-08
              • 1970-01-01
              相关资源
              最近更新 更多