Excel long支持小数吗?
我试图理解ByVal和ByRef,并使用ByVal关键字将参数从long传递到double 我注意到VBA对y平方的值给出了错误的答案。当y(我的sub中的i)是一个整数时,它就起作用了 在下面的示例中,我的I=22.5。Excel long支持小数吗?,excel,vba,byval,Excel,Vba,Byval,我试图理解ByVal和ByRef,并使用ByVal关键字将参数从long传递到double 我注意到VBA对y平方的值给出了错误的答案。当y(我的sub中的i)是一个整数时,它就起作用了 在下面的示例中,我的I=22.5。 电子表格给了我506.25英镑。 我的功能给了我484 我认为long和double都支持小数 Sub automation_test() Dim i As Long Dim j As Long Dim x As Long Dim ans As Long i = Rang
电子表格给了我506.25英镑。
我的功能给了我484 我认为long和double都支持小数
Sub automation_test()
Dim i As Long
Dim j As Long
Dim x As Long
Dim ans As Long
i = Range("B1")
j = Range("B2")
x = Range("B3")
ans = my_model(i, j, x)
Range("B4").Value = ans
End Sub
Function my_model(ByVal y As Double, ByVal m As Double, ByVal q As Double) As Double
' my_model = (y ^ 2) * (m ^ 3) * (q ^ 1 / 2)
my_model = y ^ 2
End Function
必须将所有使用的变量
声明为Double
(或声明为Single
,具体取决于要使用的最大值)
Long
变量不接受小数
Sub automation_test()
Dim i As Long
Dim j As Long
Dim x As Long
Dim ans As Long
i = Range("B1")
j = Range("B2")
x = Range("B3")
ans = my_model(i, j, x)
Range("B4").Value = ans
End Sub
Function my_model(ByVal y As Double, ByVal m As Double, ByVal q As Double) As Double
' my_model = (y ^ 2) * (m ^ 3) * (q ^ 1 / 2)
my_model = y ^ 2
End Function
差异正好来自四舍五入(向下):
22.5^2=506.25
22^2=484
长变量不接受小数!由于您不使用像参数一样使用的变量,因此调用函数后,ByVal
与ByRef
没有任何区别。。。请尝试将所有变量声明为Double。最好使用
i=Range(“B1”).value`。VBA能够猜出它是关于什么的,但是培养这样一种习惯是很好的,可以从视觉上区别于像range这样使用它。ByVal和ByRef用于API调用。对于字符串,ByVal发送一个C字符串,ByRef发送一个VB字符串,API调用需要C字符串。对于其他类型,您总是将ByVal用于in参数(这样您调用的函数不会弄乱您的变量),将ByRef用于out参数。是的!这就是问题所在。也注意到了。值。谢谢你的帮助,非常感谢@很高兴我能帮上忙!