我有一个原始文件,其中包含以下消息:
message MapInfo
{
required float version = 1;
required bool status = 2;
}
Run Code Online (Sandbox Code Playgroud)
其中,version是一个浮点值。当我从C ++向Python发送float值2.1时,在python端,它反序列化为2.09999990463。
为什么会这样呢?浮点数是否有特殊处理?
Protoc编译器版本和运行时protobuf库版本为2.4.1。
值 2.1 无法精确表示为浮点数。您可以在简单的 C++ 程序或 C++ 调试器中对此进行测试:
(gdb) print 2.1f
$1 = 2.0999999
Run Code Online (Sandbox Code Playgroud)
然而,Python 将所有内容都呈现为双精度。因此,从 C++ 接收到的浮点值会转换为最接近 2.0999999 的双精度值...,而不是最接近 2.1。
这只是以下事实的结果:并非所有十进制数都可以完全表示为浮点数。一般来说,浮点数总是有舍入误差,你不能指望它们是完全正确的值,只是非常接近。
| 归档时间: |
|
| 查看次数: |
2473 次 |
| 最近记录: |