首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BitConverter.ToSingle截断浮点值

BitConverter.ToSingle截断浮点值
EN

Stack Overflow用户
提问于 2020-10-26 07:21:21
回答 1查看 287关注 0票数 2

当使用ruby的String#unpack方法将二进制数据转换为浮动值时,我得到以下结果:

代码语言:javascript
运行
复制
[0x7d, 0xe8, 0x80, 0xc5].map(&:chr).join.unpack('e')[0]
# => -4125.06103515625

这被认为是正确的结果。

使用C# BitConverter.ToSingle方法可以得到以下结果:

代码语言:javascript
运行
复制
var firstVal = BitConverter.ToSingle(new byte[] {0x7d, 0xe8, 0x80, 0xc5}, 0);
// firstVal: -4125.061

因此,这个值似乎被截断了。是否有方法从二进制表示中提取正确的值(如ruby示例)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-26 07:49:21

我记得,Ruby只有一种浮点数类型,那就是双精度浮点数。因此,您的红宝石表达式的值类型是双精度浮点数,在C#中的模拟值是"double“。因此,如果您想得到完全相同的数字,您可以这样做(但我不确定这是否有实际意义,请参见@xanatos注释):

代码语言:javascript
运行
复制
var firstVal = (double) BitConverter.ToSingle(new byte[] {0x7d, 0xe8, 0x80, 0xc5}, 0); 
// firstVal is -4125.06103515625
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64532887

复制
相关文章

相似问题

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