Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel long支持小数吗?_Excel_Vba_Byval - Fatal编程技术网

Excel long支持小数吗?

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

我试图理解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 = 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参数。是的!这就是问题所在。也注意到了。值。谢谢你的帮助,非常感谢@很高兴我能帮上忙!