C++浮点数在Python中转换错误

3 投票
2 回答
4283 浏览
提问于 2025-04-17 10:47

我正在使用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 存储为 floatdouble 时,C++ 是怎么理解的:http://ideone.com/HvfZb

4

除了无损的 floatdouble 这种转换外,其实没有其他的转换发生。

62.02 这个数字在 C 语言中无法被完全准确地表示。当你写 float x=62.02 的时候,这个变量里会存储你写的这个值。

我强烈建议你去看看 每个计算机科学家都应该知道的浮点运算知识

撰写回答