Excel/VBA中有效数字和尾随零的用户定义函数的建议
我在下面为工作中的Excel工作表编写了用户定义函数UDF。它四舍五入到有效数字,并且能够处理尾随的零 事实上,UDF按预期工作!唯一需要注意的是,它将数字转换为文本 然而,我只是有点怀疑我忽略了什么。与我发现的其他函数相比,例如,它似乎太简单了Excel/VBA中有效数字和尾随零的用户定义函数的建议,vba,excel,user-defined-functions,significant-digits,Vba,Excel,User Defined Functions,Significant Digits,我在下面为工作中的Excel工作表编写了用户定义函数UDF。它四舍五入到有效数字,并且能够处理尾随的零 事实上,UDF按预期工作!唯一需要注意的是,它将数字转换为文本 然而,我只是有点怀疑我忽略了什么。与我发现的其他函数相比,例如,它似乎太简单了 Public Function ROUNDSF(num As Double, sigFig As Integer) Dim sigPlace As Integer Dim numFormat As String sigPlace = sigFig
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
代码评审通常是代码评审站点的候选。如果你没有实际的编程问题,这基本上是要求代码审查。@QHarr,我不知道有这样的网站,当然有。下次我会记住这个的。非常感谢。这是一个很好的网站:-请记住阅读他们的“如何提问”页面。格式为。将使用由系统或应用程序定义的当前十进制分隔符,并且可以使用,例如根据区域设置使用,但是Val是独立于区域设置的,并且总是期望使用。作为十进制分隔符,因此您的代码将仅在区域设置上工作,其中,`是十进制分隔符。使用CDbl获取正确的区域设置小数分隔符。