首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将Excel单元格中的编号转换为IEEE 754十六进制格式

将Excel单元格中的编号转换为IEEE 754十六进制格式
EN

Stack Overflow用户
提问于 2020-08-02 17:26:06
回答 1查看 6.5K关注 0票数 2

最近,由于一个数字的15位数显示限制,我一直在与Excel搏斗。我一直在寻找一种方法来显示包含在Excel单元中的值的IEEE754格式(因为它们是以这种方式工作的https://learn.microsoft.com/en-us/office/troubleshoot/excel/floating-point-arithmetic-inaccurate-result )。

在这个项目中,我更希望而不是依赖VBA (尽管如果类似memcpy_-的解决方案是可能的,我可能会受到诱惑)。

关于我当前的实现,请参见下面的答案。如有任何意见或选择,我们将不胜感激。我选择相信,我错过了一个更简单,测试良好的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-02 17:26:06

下面的顺序允许我使用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 >0xC041A666666666
  • 1>0x3F00000000000

编辑__:对chux评论的后续跟进。

我们可以看到,由于舍入错误,以下值给出了错误的结果:

  • =255+0,9999999999999 >0x40700000

在这种情况下,步骤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)))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63219066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档