【发布时间】: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
对于 Access 2013,我需要一种方法将任何小数舍入到 SQL 查询中的下一个整数。
例子:
SELECT ROUNDUP(NumberValues) FROM Table1
在上面的查询中,1.25 的行在查询后应该返回为 2。
据我所知,Access 2013 中没有用于 SQL 查询语句的 ROUNDUP 函数。
【问题讨论】:
标签: sql rounding ms-access-2013
我从这个链接中找到了一个 ROUNDUP 等效项: http://allenbrowne.com/round.html#RoundUp
要向上舍入到下一个最高数字,请利用 Int() 向下舍入负数的方式,如下所示: - Int( - [MyField])
如上所示,Int(-2.1) 向下舍入为 -3。因此,此表达式将 2.1 向上舍入为 3。
要向上取整,乘以 -100,四舍五入,然后除以 -100: Int(-100 * [MyField]) / -100
语法是违反直觉的,但它完全符合我的预期。
【讨论】:
我发现在 access 中对数字进行四舍五入的最简单方法是使用这样的 round 函数:
Round([MyField]+0.4,0)
例如,数字 10.1 会变成 10.5。使用round函数时,向上取整到11。如果是10.9,加0.4变成11.3,取整到11。
【讨论】:
优秀的答案'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
【讨论】:
这个也很好用
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
【讨论】:
这里简单易懂:
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
注意: 在调用函数之前不要忘记检查你的值是否为空! 无论如何,这个函数都会将小数点到最大的小数点舍入到下一个整数!
【讨论】:
整数四舍五入的例子:
If n > Round ( n, 0 ) then
n = Round ( n, 0 ) + 1
Else
n = Round ( n, 0 )
End If
【讨论】:
您需要做的就是使用 圆形(字段+0.004999,2) 或者 圆形(字段+0.000499,3) ...
【讨论】:
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
【讨论】: