ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3855|回复: 30

[讨论] 555和556有什么区别,为什么为溢出?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-1-1 23:16 | 显示全部楼层 |阅读模式
Sub kkk()
Dim iMinutes As Byte, iSeconds As Long
iSeconds = iMinutes * 556   ‘溢出
iSeconds = iMinutes * 555   ‘正常
End Sub
只差那么一点点 555和556对数据类型有什么影响呢?

TA的精华主题

TA的得分主题

发表于 2010-1-1 23:19 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-1-1 23:20 | 显示全部楼层
我的也没溢出,楼主的cpu有问题???

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-1-1 23:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不好意思,丢了一行代码
下面是正确的
Private Sub kkk()
    Dim iMinutes As Byte, iSeconds As Long

    iMinutes = 59
    iSeconds = iMinutes * 555
    iSeconds = iMinutes * 556
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-1-1 23:31 | 显示全部楼层
还想等号后面的值大于32745就不行
未命名.jpg
正确结果应该为32804

TA的精华主题

TA的得分主题

发表于 2010-1-1 23:32 | 显示全部楼层
byte上去是integer
超过 2^15 -1 就溢出了。

TA的精华主题

TA的得分主题

发表于 2010-1-1 23:34 | 显示全部楼层
59*555=32745<32767
59*556=32804>32767
Integer 范围是 -32,768 到 32,767 之间的数字
Private Sub kkk()
    Dim iMinutes As Byte, iSeconds As Long
    iMinutes = 59
    iSeconds = iMinutes * 32768
    iSeconds = iMinutes * 32768
End Sub
正常
也就是说小于32767的常数系统认为是interger,大于的认为是long

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-1-1 23:38 | 显示全部楼层

回复 7楼 cflood 的帖子

正解

TA的精华主题

TA的得分主题

发表于 2010-1-1 23:52 | 显示全部楼层

好吧,这是我第三次贴出同样的内容了

因为VBA做乘法运算的时候,取最精确的乘数作为结果的数据类型
所以以下乘法表达式是一定溢出的
16384 * 2  (最精确的乘数是16384 = Int类型, 而结果32768 超过Int的最大范围)
65535*65535 (最精确的乘数是65535 = Long, 而结果超过Long的最大范围

以此类推
要避免这类错误,必须将其中一个乘数强制指定为足够大的数据类型
或者简单地加一位小数点,如 *2 写成 *2.0, 就可以保证结果的数据类型足够精确
注意: 这里起作用的是 乘数 的数据类型,而不是结果的数据类型
所以 dim x as double
x= 16384 * 2
还是会溢出的

VBA帮助节录......................
* 运算符
用来将两数相乘。
语法
result = number1*number2
说明
result 的数据类型通常与最精确的表达式的数据类型相同。精确度由最低到最高的顺序是
Byte、 Integer、Long、Single、Currency、Double 和 Decimal。下列情况是例外:

TA的精华主题

TA的得分主题

发表于 2010-1-1 23:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
有写的C的习惯的话就少有溢出了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-28 09:17 , Processed in 0.034225 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表