C++浮点数在Python中转换错误
我正在使用SWIG将我的C++代码封装成Python代码。但是,浮点数的转换有点奇怪。
比如,我有下面这个函数(用C++写的)
float foo() {
float x=62.02;
return x;
}
然后在Python中执行它(经过SWIG封装)
>>> import mymodule
>>> mymodule.foo()
62.02000045776367
>>>
结果返回的是62.02000045776367
,而不是62.02
。
有没有办法告诉SWIG如何进行正确的转换呢?
2 个回答
6
这个转换是正确的,只是你不能用 float
精确表示小数 62.02
,就像你不能用小数表示分数 2/3
一样。
你可以通过这段简单的代码看到更多内容,看看当你把 62.02
存储为 float
和 double
时,C++ 是怎么理解的:http://ideone.com/HvfZb
4
除了无损的 float
转 double
这种转换外,其实没有其他的转换发生。
62.02
这个数字在 C 语言中无法被完全准确地表示。当你写 float x=62.02
的时候,这个变量里会存储你写的这个值。
我强烈建议你去看看 每个计算机科学家都应该知道的浮点运算知识。