gpt4 book ai didi

vba - VBA中Long数据类型的误解

转载 作者:行者123 更新时间:2023-12-04 16:15:41 24 4
gpt4 key购买 nike

从 VBA 中溢出错误的帮助中,有以下示例:

Dim x As Long
x = 2000 * 365 ' gives an error

Dim x As Long
x = CLng(2000) * 365 ' fine

我原以为,由于 Long 数据类型应该能够保存 32 位数字,因此第一个示例可以正常工作。

我问这个是因为我有一些这样的代码:
Dim Price as Long
Price = CLng(AnnualCost * Months / 12)

当AnnualCost 为5000 且Months 为12 时,这会引发溢出错误。

我错过了什么?

最佳答案

2000 和 365 是整数值。在 VBA 中,整数是 16 位有符号类型,当您对 2 个整数执行算术时,算术以 16 位进行。由于这两个数字相乘的结果超过了可以用 16 位表示的值,因此您会得到一个异常(exception)。第二个示例有效,因为第一个数字首先转换为 32 位类型,然后使用 32 位数字执行算术。在您的示例中,正在使用 16 位整数执行算术,然后将结果转换为 long,但此时为时已晚,溢出已经发生。解决方案是先将乘法中的一个操作数转换为long:

Dim Price as Long
Price = CLng(AnnualCost) * Months / 12

关于vba - VBA中Long数据类型的误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/316312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com