gpt4 book ai didi

excel - 将数字从 Excel 单元格转换为 IEEE 754 十六进制格式

转载 作者:行者123 更新时间:2023-12-04 09:15:54 24 4
gpt4 key购买 nike

最近,由于数字的 15 位有效数字显示限制,我一直在与 Excel 搏斗。我一直在寻找一种方法来显示 Excel 单元格中包含的值的 IEEE 754 格式(因为它们是 documented 以这种方式工作)。
我更喜欢 不是 在这个项目中依赖 VBA(尽管如果有可能使用类似 memcpy 的解决方案,我可能会受到诱惑)。
有关我当前的实现,请参阅下面的答案。感谢任何输入或替代方案。我选择相信我错过了一个更简单、经过充分测试的解决方案。

最佳答案

以下序列允许我使用 Excel 公式将数字转换为其 IEEE 754 十六进制表示。
除了0之外,我没有尝试处理任何异常。从单元格A1到G1:

  • A1:0.123456
  • B1:=INT(LOG(ABS(A1);2)) 指数
  • C1:=ABS(A1)/(2^B1)尾数
  • D1: =(C1-1)*(2^52) 尾数转十进制
  • E1: =DEC2HEX(1023+B1+IF(A1<0;2^11;0);3) 将符号和指数转换为十六进制
  • F1: =CONCATENATE(DEC2HEX(D1/2^32;5);DEC2HEX(MOD(D1;2^32);8)) 将十进制转换为十六进制。
  • G1:="0x"&IF(A1=0;0;E1&F1)

  • 我的一些结果:
  • 22222.0948199999 > 0x40D5B3861187E7A5
  • =1.35632902954101*2^14 > 0x40D5B3861187E7A7
  • 22222.09482 > 0x40D5B3861187E7C0
  • 0.000123456 > 0x3F202E7EF70994DD
  • 1E+307 > 0x7FAC7B1F3CAC7433
  • -35.3 > 0xC041A66666666666
  • 1 > 0x3FF0000000000000

  • EDIT :chux 评论的跟进。
    我们可以看到由于舍入错误,以下值给出了错误的结果:
  • =255+0,9999999999999 > 0x40700000FFFFFFFE

  • 在这种情况下,在步骤 D1 中给出的值是负的。如果我使用此信息来更新我的指数,我的结果似乎是一致的:
  • =255+0,9999999999999 > 0x406FFFFFFFFFFFFC

  • 这是更新的 B1 公式:
  • B1:=IF((ABS(A1)/(2^INT(LOG(ABS(A1);2)))-1)*(2^52)<0;INT(LOG(ABS(A1);2))-1;INT(LOG(ABS(A1);2)))
  • 关于excel - 将数字从 Excel 单元格转换为 IEEE 754 十六进制格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63219066/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com