我已经在下面为工作中的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中有什么我忽略的东西吗?或有什么建议?
答案 0 :(得分:1)
如果您希望它返回一个值,则可以使用以下命令关闭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