我正在使用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如何进行正确的转换?
答案 0 :(得分:5)
这是正确的转换,只是你无法用62.02
精确地表示小数float
,就像你不能用十进制表示小数2/3
一样。
您可以通过这个简短的代码看到更多内容,您可以看到在62.02
和float
同时存储double
时C ++看到的内容:http://ideone.com/HvfZb
答案 1 :(得分:4)
除了无损float
- > double
转换之外,没有转换。
62.02
无法完全表示为C float
。执行float x=62.02
时,变量将包含您提及的值。
我强烈建议您阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic。