Python整数与浮点数求和精度异常是否为Bug?
为什么Python整数加浮点数会出现精度误差,而C++看起来正常?
这绝对不是Python的Bug,核心原因是二进制浮点数的固有精度限制,和编程语言无关。
浮点数的存储本质
计算机用二进制格式存储浮点数(Python和C++默认都采用IEEE 754标准的双精度浮点数),但大部分十进制小数无法被二进制浮点数精确表示——比如你用到的0.12、0.23,它们转换成二进制是无限循环的小数,存储时只能取一个最接近的近似值。当整数和这个近似值相加后,转换回十进制就会出现肉眼可见的微小误差,比如12+23.12得到35.120000000000005,就是这个近似过程带来的结果。
为什么C++看起来“正常”?
不是C没有这个误差,而是它默认的输出规则帮你“隐藏”了误差。C的cout默认只会显示6位有效数字,会自动截断或四舍五入后面的小数位。如果你强制让C++输出更高精度的结果,就能看到和Python一模一样的误差:
#include <iostream> #include <iomanip> using namespace std; int main() { cout << setprecision(15) << (12 + 23.12) << endl; // 输出结果会是35.120000000000005 return 0; }
怎么在Python里得到“符合预期”的显示?
如果只是想让输出看起来整洁,可以用round()函数指定保留的小数位数:
print(round(12 + 23.12, 2)) # 输出35.12
如果需要高精度的十进制运算(比如金融场景),可以用Python内置的decimal模块,它能以十进制方式处理数值,避免二进制转换带来的误差。
内容的提问来源于stack exchange,提问作者Ali Heydarov
相关产品推荐
相关产品推荐

