excel - 从十六进制字符串转换为 Double 会产生错误的结果

标签 excel excel-2013 vba

我正在尝试将 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

用这样的数字转换为十进制
  • 0x047B1142591E80
  • 0x044A81325A1E80
  • 0x047B7542591E80

  • 我不断在大量数据中获得随机结果。有时在其他时间发现数字相差 6 或 2。

    最佳答案

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

    关于excel - 从十六进制字符串转换为 Double 会产生错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21244170/

    相关文章:

    excel - 重命名目录中的文件不仅是文件夹

    Excel VBA - 格式条件

    excel - 运行时错误 '28' : Out of stack space in Excel VBA and Excel crashes

    excel - 自动更新数值增量

    Excel在单元格上添加注释

    excel - 在用户窗体/工作表对象中具有可用的公共(public)变量

    vba - Sheet.Activate 更改工作表,但继续编辑上一张工作表上的数据

    vba - Vlookup 后的超链接

    VBA:基于相邻单元格编辑单元格值,无需循环

    vba - excel:更改高级过滤器中的日期格式