Excel 公式在数字 (30) 之后四舍五入而不是 50 到最接近的百位
Excel formula round up after number (30) instead of 50 to nearest hundred
我想标题已经说明了一切,是否可以将数字(本例中为 30)四舍五入到最接近的百位?我相信 ROUND 函数默认在 50 之后四舍五入。我正在寻找可以做到这一点的 Excel 公式。
抱歉,我应该提供一些示例。
考虑以下数字(总是整数):
Given Expected
120 100
130 200
131 200
5410 5400
5430 5500
现在提供的示例:
=IF(1*RIGHT(A1,2)<30,A1-RIGHT(A1,2),A1+100-RIGHT(A1,2))
=IF(A3-INT(A3)<0.3,INT(A3),INT(A3)+1)
编辑:
这只是您可能前进的方向。它指的是正整数。但它需要大量的工作,例如当我在一种情况下将因子更改为 2 时,dblDif 最终变为 1.9999999999 而不是 2。所以仅将其用作一个想法:
Function R30(Num As Double, Round As Integer, Optional Factor As Integer) _
As Double
If IsMissing(Factor) Then Factor = 3
Dim dblNum As Double
Dim dblDif As Double
dblNum = Num / 10 ^ Round
dblDif = (dblNum - Int(dblNum)) * 10 ^ Round
If dblDif <> 0 Then
If dblDif < Factor * 10 ^ (Round - 1) Then
R30 = Int(dblNum) * 10 ^ Round
Else
R30 = (Int(dblNum) + 1) * 10 ^ Round
End If
Else
R30 = Num
End If
End Function
Sub R30use()
Debug.Print R30(133, 1, 3)
End Sub
也许是这样的。
它检查整数中的最后两个数字(我假设您没有数字)是否等于或大于 30。如果是这种情况,它将向上舍入到最接近的 100。否则它将向下舍入到最接近的 100。
=IF(VALUE(RIGHT(A1,2))>=30,ROUNDUP(A1,-2),ROUNDDOWN(A1,-2))
我写了这个自定义函数,它也考虑了 0 以下的数字。
Function CustomRound(lngValue As Long)
Dim lngValueMin As Long
Dim lngValuePart As Long
Dim intNeg As Integer
If lngValue < 0 Then
lngValue = lngValue * -1
intNeg = -1
Else
intNeg = 1
End If
lngValueMin = lngValue - Right(lngValue, 2)
lngValuePart = Right(lngValue, 2)
If lngValuePart < 30 Then
CustomRound = lngValueMin * intNeg
Else
CustomRound = (lngValue + (100 - lngValuePart)) * intNeg
End If
End Function
我想标题已经说明了一切,是否可以将数字(本例中为 30)四舍五入到最接近的百位?我相信 ROUND 函数默认在 50 之后四舍五入。我正在寻找可以做到这一点的 Excel 公式。
抱歉,我应该提供一些示例。
考虑以下数字(总是整数):
Given Expected
120 100
130 200
131 200
5410 5400
5430 5500
现在提供的示例:
=IF(1*RIGHT(A1,2)<30,A1-RIGHT(A1,2),A1+100-RIGHT(A1,2))
=IF(A3-INT(A3)<0.3,INT(A3),INT(A3)+1)
编辑:
这只是您可能前进的方向。它指的是正整数。但它需要大量的工作,例如当我在一种情况下将因子更改为 2 时,dblDif 最终变为 1.9999999999 而不是 2。所以仅将其用作一个想法:
Function R30(Num As Double, Round As Integer, Optional Factor As Integer) _
As Double
If IsMissing(Factor) Then Factor = 3
Dim dblNum As Double
Dim dblDif As Double
dblNum = Num / 10 ^ Round
dblDif = (dblNum - Int(dblNum)) * 10 ^ Round
If dblDif <> 0 Then
If dblDif < Factor * 10 ^ (Round - 1) Then
R30 = Int(dblNum) * 10 ^ Round
Else
R30 = (Int(dblNum) + 1) * 10 ^ Round
End If
Else
R30 = Num
End If
End Function
Sub R30use()
Debug.Print R30(133, 1, 3)
End Sub
也许是这样的。
它检查整数中的最后两个数字(我假设您没有数字)是否等于或大于 30。如果是这种情况,它将向上舍入到最接近的 100。否则它将向下舍入到最接近的 100。
=IF(VALUE(RIGHT(A1,2))>=30,ROUNDUP(A1,-2),ROUNDDOWN(A1,-2))
我写了这个自定义函数,它也考虑了 0 以下的数字。
Function CustomRound(lngValue As Long)
Dim lngValueMin As Long
Dim lngValuePart As Long
Dim intNeg As Integer
If lngValue < 0 Then
lngValue = lngValue * -1
intNeg = -1
Else
intNeg = 1
End If
lngValueMin = lngValue - Right(lngValue, 2)
lngValuePart = Right(lngValue, 2)
If lngValuePart < 30 Then
CustomRound = lngValueMin * intNeg
Else
CustomRound = (lngValue + (100 - lngValuePart)) * intNeg
End If
End Function