C ++浮动到Python浮动错误转换

时间:2012-01-21 20:43:58

标签: c++ python swig

我正在使用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 个答案:

答案 0 :(得分:5)

这是正确的转换,只是你无法用62.02精确地表示小数float,就像你不能用十进制表示小数2/3一样。

您可以通过这个简短的代码看到更多内容,您可以看到在62.02float同时存储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