CSng(应该是吧),返回单精度值
Hex函数,只能返回整数
--------------------------------------
也许是我被CSng的名字骗到……但CSng(1.1234)=1.1234是不争的事实……我猜你用整型数储存的返回值吧……代码这样写:
Dim mySng as Single '你是不是声明成Long或Integer了?
mySng = CSng(1.1234) 'CSng参见下文
MsgBox mySng '是1.1234,一定是1.1234
'顺便问下楼主IEEE754浮点数和Single是不是一回事?对这方面没有了解。
CSng Single 负数为 -3.402823E38 至 -1.401298E-45;正数为 1.401298E-45 至 3.402823E38
至于转为4字节值,可以根据一下代码改编
Function funSignSngTo4Byt(SingleData As Single, ByRef tBytes() As Byte) As Boolean
'高位在前,低位在后
Dim i, d As Integer
Dim PorN As Byte
Dim ExpVal, temp As Long
Dim FraVal, t1 As Long
Dim SingleFra, tempval As Single
Dim gbytBinData(3) As Byte
If SingleData = 0 Then
For i = 0 To 3
gbytBinData(i) = 0
Next i
Exit Function
End If
If SingleData >= 0 Then '符号位
PorN = 0
Else
PorN = &H80
SingleData = -1 * SingleData '变为正数
End If
ExpVal = Int(Log(SingleData) / Log(2)) '指数
If ExpVal > 128 Then
funSignSngTo4Byt = False
Exit Function
End If
If ExpVal = 127 Then
SingleFra = SingleData / (2 ^ ExpVal)
Else
SingleFra = SingleData / (2 ^ ExpVal) - 1
End If
FraVal = Int(SingleFra * 128 * 256 * 256) And &HFFFFFF
ExpVal = ExpVal + 127
gbytBinData(0) = PorN + ExpVal \ 2
gbytBinData(3) = FraVal And &HFF
FraVal = Int(FraVal \ 256)
gbytBinData(2) = FraVal Mod 256
FraVal = FraVal \ 256
gbytBinData(1) = (FraVal Mod 256) Or ((ExpVal And 1) * 128)
For i = 0 To 3
tBytes(i) = gbytBinData(i)
Next i
End Function
tBytes()里的值就是SingleData的四个字节
说句实话lz应该先上网看看相关的资料,其实上面的代码是我从网上看到的,加了个输出为4字节就贴上来了……
原贴
http://zhidao.baidu.com/question/30389120.html参考资料:http://zhidao.baidu.com/question/30389120.html