VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 923|回复: 9

运行中如何判断某变量可能=-1.#QNAN这个值?

[复制链接]
发表于 2020-5-25 21:00:44 | 显示全部楼层 |阅读模式
在一个由纯数据组成的文件中,还是出现了不和谐的数据,竟然取出的数据 x=-1.#QNAN,当我与其他数据比较时因异常而崩溃。查了度娘,说:这不是一个数!为了避免崩溃,我该如何事先把它判断出来呢?
截图如下:

x变量异常值

x变量异常值

发表于 2020-5-26 08:20:41 | 显示全部楼层
本帖最后由 jy4977596491 于 2020-5-26 08:30 编辑

其实你可以观察Long和Single同样赋值10000,Single类型保存到文件的十六进制数值是&H461C4000并非实际数值(而是由底数m 和 指数e构成的),而Long类型保存到文件的十六进制数值是&H00002710是实际数值10000。当文件数据中是&HFFFFFFFF,那么读取到Single类型就会出现-1.#QNAN的情况,其实非必要的情况下还是用Long,第一速度肯定比Single要快很多
回复 支持 反对

使用道具 举报

发表于 2020-5-26 11:35:01 | 显示全部楼层
只是为了避免崩溃,直接异常处理
On Error  Resume Next
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-26 11:41:40 | 显示全部楼层
jy4977596491 发表于 2020-5-26 08:20
其实你可以观察Long和Single同样赋值10000,Single类型保存到文件的十六进制数值是&H461C4000并非实际数值 ...

最大的问题是,数据文件是在其它地点生成的,我这里负责取出来。在取出来的时候就出现了上述问题。我想解决:在崩溃之前把这个‘-1.#QNAN‘识别出来,再继续后面工作。可是,我试了多种方法也没有找到可以解决问题的判断条件。请各位大拿再多给点思路和提示,谢谢先!
回复 支持 反对

使用道具 举报

发表于 2020-5-26 13:03:23 | 显示全部楼层
本帖最后由 jy4977596491 于 2020-5-26 13:07 编辑

在IDE下Single值为-1.#QNAN进行数值比较会溢出,可以用On Error捕捉错误得到6,但是编译成exe就不会提示了,还有编译时取消浮点检查打勾,所以用不加On Error,直接编译就可以

选本机代码,非P-代码

点评

谢谢!还有这么些道道,受益了。  发表于 2020-5-27 15:03
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2020-10-20 13:28

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表