乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > excel转vcf-Excel VBA N进制数制转换和IEEE浮点转换

excel转vcf-Excel VBA N进制数制转换和IEEE浮点转换

作者:乔山办公网日期:

返回目录:excel表格制作

1。IEEE的浮点转换


起因是朋友工作需要做IEEE的浮点计算和数制转换,手工XXXX一两个没关系,多了就吐血....


IEEE的浮点,常见的是4BYTE一组这种,和VB对应的SINGLE单精度型。在C/C++里直接就用结构转换了。以前的VB里,也有用WINAPI COPYMEMORY实现的(在modIEEE2里有一个),不过这里用的是modIEEE1那个模块,VBA自已的LSET语句,原理上差不多。


演示里用函数实现,在表1里B2和B4两个中文名函数,很简单,注意16进制的BYTE是低位在前,高位在后的字符。


2。数制之间的转换


所有函数和常数都定义在模块modNsys里,和IEEE没关系。


主要的函数是两个,


NtoVal(N进制字符串, 可选的N进制值) '后面那个默认的进制是16


例如 Ntoval("1f") 得到31


ValtoN(数值, 可选的N进制值, 可选的小数精度) '默认的进制是16,小数默认是4


例如 valtoN(256) 得到100


比如10进制与16进制,2进制与8进制啦,3进制与10进制啦,以至N进制与X进制


不过这里的模块,用的是36以内的N进制。


原因很简单,你们看代码里,我的那个常数字符串(提供集合)的只有0-10,A-Z,MAXN常数也只有36,要扩展可以自已扩展。


(当然也可以把字符打乱,比如开始的字符用"98765%#2*"之类代替0123456789,不过会把自已搞晕了就是,又不是密码学)


可以做N进制小数转换。超出16进制的,大家可能不习惯,比如17进制,多了个G字符——当然,前面说过了,你要是没事干,用其它字符代替G,比如“囧”代替G,那么17进制里,每一阶的16这个数值(相当于10进制的9,16进制的F),就会变成囧了....


加了N多的注释,算法没有优化,和IEEE不同,是老老实实用阶乘的算法转换。


在表1的A列和B列有一堆进制转换的例子,公式引用函数在B列


相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网