我正在尝试将14位十六进制数转换为十进制数。
我有这个VBA代码。
Option Explicit
Public Function HexadecimalToDecimal(HexValue As String) As Double
Dim ModifiedHexValue As String
ModifiedHexValue = Replace(HexValue, "0x", "&H")
HexadecimalToDecimal = CDec(ModifiedHexValue)
End Function
将这样的数字转换为十进制
我不断在大量数据中获得随机结果。有时在其他时间发现数字偏离了6或2。
答案 0 :(得分:2)
尝试将函数的返回类型从Double
更改为Variant
。 Double
只有大约15个十进制数字的精度,因此不能,例如,准确捕获值1261213964639872(有16位数)。它最接近的是1261213964639870.通过将返回类型更改为Variant
,将保留CDec
返回的完整精度。您不能使用Decimal
返回类型,因为VBA由于某种原因不支持此类。
答案 1 :(得分:1)
问题不在于VBA。 Excel单元格只能以数字格式保存15位数字。因此,“数字” 1234567891234567
将始终显示 1234567891234560
。通过将项目转换为文本和/或将单元格格式更改为文本可以避免这种情况。
但这并不总是奏效。
确保它将保留所有数字的唯一可靠方法是将某些内容附加到不是数字的字符串上。
此代码将在数字前附加撇号,但返回整个字符串。
Public Function HexadecimalToDecimal(HexValue As String) As String
Dim ModifiedHexValue As String
ModifiedHexValue = Replace(HexValue, "0x", "&H")
HexadecimalToDecimal = "'" & CDec(ModifiedHexValue)
End Function
不幸的是,这不是一个完美的解决方案。