当前位置:  开发笔记 > 后端 > 正文

对VBA中Long数据类型的误解

如何解决《对VBA中Long数据类型的误解》经验,为你挑选了1个好方法。

从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时,这会引发溢出错误.

我错过了什么?



1> Robert Gambl..:

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

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

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有