从hexstring到Double的转换会产生错误的结果

我正在尝试将14位hex数转换为十进制数。

我有这个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 

用这样的数字转换成十进制

  • 0x047B1142591E80
  • 0x044A81325A1E80
  • 0x047B7542591E80

我不断收到大量数据的随机结果。 有时在其他时候发现数字是6或2。

尝试将函数的返回types从“ Double更改为“ VariantDouble只有大约十五位精度的十进制数,所以不能,例如,精确地捕获值1261213964639872(它有16位数字)。 它可以得到最接近的是1261213964639870.通过将返回types更改为VariantCDec返回的完整精度将被保留。 您不能使用Decimal返回types,因为VBA出于某种原因不支持这一点。

问题不在于VBA。 Excel单元格只能以数字格式保存15位数字。 所以“数字” 1234567891234567将始终显示1234567891234560 。 这可以通过将项目转换为文本和/或将单元格格式更改为文本来避免。

但是这并不总是奏效。

确保它保留所有数字的唯一可靠方法是在string上附加一些不是数字的东西。

这段代码会在数字前附加一个撇号,但是返回整个string。

 Public Function HexadecimalToDecimal(HexValue As String) As String Dim ModifiedHexValue As String ModifiedHexValue = Replace(HexValue, "0x", "&H") HexadecimalToDecimal = "'" & CDec(ModifiedHexValue) End Function 

不幸的是,这不是一个完美的解