C++浮点数使用注意事项 C 浮点数使用中核心注意事项是精度误差、格式化输出控制、类型选择与比较方式具体要点如下1. 两种浮点数类型类型关键字精度占用空间记忆口诀单精度float约 6-7 位有效数字4 字节小盒子装得少双精度double约 15-16 位有效数字8 字节大盒子装得多建议信奥竞赛中无脑选double。float精度太低容易踩坑。2. 最大陷阱精度误差浮点数在计算机中是用二进制存储的很多十进制小数无法被精确表示。doublea0.10.2;coutaendl;// 输出可能是 0.30000000000000004而不是 0.3后果直接用比较两个浮点数可能会出错。doublea0.10.2;if(a0.3){cout相等;// 这行代码可能不会执行}正确做法用一个极小的数叫容差来比较doublea0.10.2;if(abs(a-0.3)1e-8){// 1e-8 就是 0.00000001cout相等;}口诀浮点数比较永远不要用要用差值小于一个很小的数来判断。3. 格式化输出printf控制小数位数这是信奥竞赛中最常用的技巧doublepi3.14159265;printf(%.2f\n,pi);// 保留2位小数输出 3.14四舍五入printf(%.4f\n,pi);// 保留4位小数输出 3.1416printf(%.0f\n,pi);// 保留0位小数输出 3注意printf的%f默认保留6 位小数如果题目要求不同位数一定要用%.nf指定。4.cin/cout控制小数位数如果用cout需要加iomanip头文件#includeiomanipdoublepi3.14159265;coutfixedsetprecision(2)piendl;// 输出 3.14注意fixed和setprecision一旦设置后面所有的cout都会受影响直到你重新设置。5. 整数除法 vs 浮点除法这是孩子们最容易犯的错cout7/2endl;// 输出 3整数除法直接砍掉小数cout7.0/2endl;// 输出 3.5浮点除法cout(double)7/2endl;// 输出 3.5强制转换口诀只要有一个操作数是浮点数结果就是浮点数。两个都是整数结果就是整数小数部分直接扔掉。6.scanf和printf的占位符doublex;scanf(%lf,x);// 读入 double注意是 %lf有个 lprintf(%f,x);// 输出 double用 %f 就行输出时不用加 l易错点scanf读double用%lfprintf输出double用%f。很多孩子在这里搞混。7. 浮点数的特殊值doublea1.0/0.0;// 结果是 inf无穷大doubleb0.0/0.0;// 结果是 nan不是一个数在信奥竞赛中尽量避免除以零。如果不确定可以先判断分母是否为零。 总结速查表注意事项正确做法类型选择统一用double比较大小用abs(a-b) 1e-8不用保留小数printf(%.nf, x)或cout fixed setprecision(n)除法陷阱确保至少一个操作数是浮点数scanf 读入double用%lffloat用%f默认输出printf的%f默认 6 位小数