我已经为工作中的Excel工作表编写了下面的用户定义函数(UDF(。它四舍五入到有效数字,并且能够处理尾随的零。
实际上,UDF按预期工作!唯一需要注意的是,它将数字转换为文本。
然而,我只是有点怀疑我忽略了什么。与其他功能相比,我发现。https://www.vertex42.com/ExcelTips/significant-figures.html),这似乎太简单了。
Public Function ROUNDSF(num As Double, sigFig As Integer)
Dim sigPlace As Integer
Dim numFormat As String
sigPlace = sigFig - (1 + Int(Log(num) / Log(10)))
numFormat = "0." & String(sigPlace, "0")
ROUNDSF= Format(num, numFormat)
End Function
在这个UDF中,有什么我忽略了的吗?或者有什么建议吗?
如果你想让它返回一个值,你可以用关闭UDF
ROUNDSF = Val(Format(num, numFormat))
不过请记住,这将使用现有的默认格式,因此请确保没有,或者它与您的要求兼容。
根据Vincent的评论,如果您的用户区域设置可能使用.
以外的东西作为小数分隔符,请使用Cdbl:
ROUNDSF = CDbl(Format(num, numFormat))
您还应该捕获可能出现的-ve SigPlace值,例如:
Public Function ROUNDSF(num As Double, sigFig As Integer) As Double
Dim sigPlace As Integer
Dim numFormat As String
sigPlace = sigFig - (1 + Int(Log(num) / Log(10)))
If sigPlace < 0 Then sigPlace = 0
numFormat = "0." & String(sigPlace, "0")
ROUNDSF = Cdbl(Format(num, numFormat))
End Function