首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过套接字跨网络传输浮点

通过套接字跨网络传输浮点
EN

Stack Overflow用户
提问于 2013-05-21 16:11:53
回答 2查看 2.4K关注 0票数 1

我们有一个TCP/IP套接字软件,包括一个、Java客户端、C++服务器。整个套接字的数据包含数字、int、floatchar数组。这些浮标的精度为点后的四位数。最近,我们开始使用char数组来表示数据结构/协议中的浮点数,或者使用 int 来表示浮点数(浮点数乘以时间10000,然后在接收端除以10000 )。

有人告诉我,如果直接在数据结构/协议中使用浮点数,就很难保持精度。发送方很难准确地将浮点数放入套接字中,而接收方很难接收/转换回确切的浮动号。

我不相信。再读一遍维基。单精度浮标似乎可以提供6-9精度:

这给出了6到9个有效十进制数字的精度(如果一个小数点最多为6个的十进制字符串被转换为IEEE 754单个精度,然后转换回相同的有效小数数,那么最后的字符串应该与原始数字匹配;如果IEEE 754单个精度被转换为至少9个有效小数的十进制字符串,然后转换回单个,那么最后的数字必须与原来的3匹配)。

如果所需的精度为4或6,那么在互联网上传输浮标的良好做法是什么?不止这些怎么样?加倍!?银行如何处理更大的浮点数?

EN

回答 2

Stack Overflow用户

发布于 2013-05-21 21:03:44

这些浮标的精度是点之后的四位数。

不,不是。你的浮点数根本没有小数点后的四个小数位数。它们的二进制数未知,您无法控制。你所有的乘积和除以10000不会也不能改变这一点,因为小数位和二进制位是不可通约的。如果您想要一个固定的十进制精度,您必须使用十进制基数。

最近,由于精度的原因,我们开始使用char数组来表示数据结构/协议中的浮点数,或者使用int表示浮点数(浮点数为int,时间为10000,然后在接收端除以10000 )。

完全是浪费你的时间。请参见上面的。如需证明,请参见这里

有人告诉我,如果直接在数据结构/协议中使用浮点数,就很难保持精度。发送方很难准确地将浮点数放入套接字中,而接收方很难接收/转换回确切的浮动号。

你被误导了。您可以使用DataOutputStream和DataInoutStream的API将浮点以二进制格式直接放置到导线上,并进行相同的恢复。然而,你根本不应该使用浮点。

如果所需的精度为4或6,那么在互联网上传输浮标的良好做法是什么?

这个问题在术语上是矛盾的。

银行如何处理更大的浮点数?

他们不使用它们。

票数 1
EN

Stack Overflow用户

发布于 2013-05-21 16:38:20

你看过google协议缓冲区吗?https://code.google.com/p/protobuf/

基本上,您将使用protobuf将浮点序列化为字符串,通过网络发送字符串,并在另一侧使用protobuf将其转换为浮点数。当您使用它时,您还可以将消息的其余部分以字符串的形式发送,并带有protobuf,以在您发送的数据中强制执行某种结构/一致性。

此外,编码的消息与语言无关,所以任何有协议缓冲库的语言(google提供c++、python和java实现,还有无数其他语言的第三方实现)都可以读取/解析/使用该消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16674664

复制
相关文章

相似问题

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