可靠地将浮点数转换为整数

Converting floats to ints reliably

提问人:Mars 提问时间:10/15/2017 更新时间:10/15/2017 访问量:60

问:

我有一个使用浮子来处理距离的应用程序,例如,2.5f 是 2.5 米(250 厘米)。现在,我想在不通过网络使用浮点数的情况下与该应用程序进行交互。我无法更改它使用浮点数的事实,但我可以让它向我的第二个应用程序发送和读取整数。

作为最小的单位,我可以使用一厘米,即 0.01f。然后,两个应用程序将该值作为整数“1”进行通信,应用程序 1 会将其转换为浮点数或从 float 进行转换。

我的问题是:是否有可能以 100% 的可靠性进行转换?有没有办法保证一侧的 12345 始终是另一侧的 123,45,反之亦然,理想情况下不会对性能产生重大影响?

我知道浮点精度问题,我的一些初步测试似乎是不可能的,但我希望可能有一种我不熟悉的方法。

C# .NET 点浮 点精度

评论

1赞 Jon Skeet 10/15/2017
好吧,你已经有一个问题了,因为你不能精确地表示(比如)1.01米。这可能由小于 1.01 或大于 1.01 的值表示,这可能会影响舍入。
0赞 CodingYoshi 10/15/2017
现在,我想在不通过网络使用浮点数的情况下与该应用程序进行交互。你为什么要这样做?
0赞 Patricia Shanahan 10/15/2017
C# 是否有等效于 Java 的 Float.floatToIntBits(float) 方法?如果是这样,并且如果双方使用相同的浮点格式,那么这可能既高效又可靠。
0赞 Mars 10/15/2017
@CodingYoshi 因为第二个应用程序无法处理浮点数。
0赞 Mars 10/15/2017
@PatriciaShanahan 如果我正确理解了该函数的目的,您是对的,您可以在不更改其值的情况下可靠地来回传输浮点数,但您仍然无法将其转换为 int 并返回。

答: 暂无答案