C语言中printf输出浮点数按"%m.nf"格式输出,为什么有的会四舍五入,而有的没有? C语言中小数输出时会自动四舍五入么?
c\u8bed\u8a00\u7684\u56db\u820d\u4e94\u5165\u95ee\u9898\uff0cprintf\u8f93\u51fa\u65f6\u4ec0\u4e48\u60c5\u51b5\u56db\u820d\u4e94\u5165\uff0c\u4ec0\u4e48\u60c5\u51b5\u4e0d\u56db\u820d\u4e94\u5165?printf\u5728\u8f93\u51fa\u6d6e\u70b9\u6570\u7684\u65f6\u5019\u90fd\u662f\u56db\u820d\u4e94\u5165\u7684.
\u8981\u60f3\u4e0d\u56db\u820d\u4e94\u5165, \u9700\u8981\u81ea\u5df1\u505a\u5904\u7406\u7684.
PS:\u90e8\u5206\u7cfb\u7edf\u4f7f\u7528\u7684\u4e0d\u662f\u56db\u820d\u4e94\u5165 \u800c\u662f\u56db\u820d\u516d\u5165\u4e94\u6210\u53cc
c\u8bed\u8a00\u4e2d\u5c0f\u6570\u8f93\u51fa\u65f6\u4e0d\u4f1a\u81ea\u52a8\u56db\u820d\u4e94\u5165\u3002
首先肯定,电脑一定会四舍五入;
其次解释,为什么119.985四舍五入后成为了119.98了,因为计算机内部是二进制,某些看似简单小数转换为二进制会许多位、甚至循环,所以再次转换为十进制的时候可能产生误差,119.985这么一折腾有可能就成为了119.984999999,因此出现帖子的情况。
作为验证,我在UNIX平台写了一个简单的程序,程序代码和执行过程如下图:
%m.nf避免不了四舍五入的。
一般都有四舍五入的,不是说有的有有的没有
这个题中对于100.555
%.2f输出100.56
%6.2f输出19.98,是因为整数部分就只有2位,所以全部输出,小数部分还是进行了四舍五入的
printf在输出浮点数的时候都是四舍五入的.
要想不四舍五入, 需要自己做处理的.
PS:部分系统使用的不是四舍五入 而是四舍六入五成双
绛旓細杈撳嚭涓涓娴偣鍨嬫暟鎹紝鏈灏忓搴︿负4涓瓧绗﹀锛堝寘鎷皬鏁扮偣鍦ㄥ唴锛夛紝涓嶈冻4浣嶅彸瀵归綈锛屽乏琛ョ┖鏍硷紝灏忔暟鐐瑰悗淇濈暀涓や綅灏忔暟銆傚锛printf("%4.2f", 1.2 ); //杈撳嚭缁撴灉 1.20 printf("%4.2f", 1.195 ); //杈撳嚭缁撴灉 1.20 printf("%4.2f", 1.194 ); //杈撳嚭缁撴灉 1.19 printf("%4.2f", 12...
绛旓細printf("%f",fVal);//杩欐槸娴偣榛樿杈撳嚭鏍煎紡锛屽皬鏁扮偣淇濈暀6浣 printf("%.1f",fVal);//.1鏄鏄庯紝灏忔暟鐐逛繚鐣1浣嶏紝瀵瑰叾鍚庣殑鏁版嵁杩涜鍥涜垗浜斿叆 printf("%.2f",fVal);//.2鏄鏄庯紝灏忔暟鐐逛繚鐣2浣嶏紝瀵瑰叾鍚庣殑鏁版嵁杩涜鍥涜垗浜斿叆锛屼綘鎯充繚鐣欏嚑浣嶏紝灏辩敤鐐瑰嚑 printf("%10f",fVal);//杈撳嚭瀹藉害涓10涓...
绛旓細printf("%7.3f",100/3.0);琛ㄧず缁撴灉鍗犱竷浣嶏紝灏忔暟閮ㄥ垎鍗3浣嶏紝杩欐牱灏卞彲浠ヤ簡锛屽苟涓斿皬鏁扮偣鍚庣涓変綅鏄洓鑸嶄簲鍏ョ殑缁撴灉銆備緥濡傦細C璇█涓诞鐐规暟杈撳嚭绮剧‘鍒颁袱浣嶅皬鏁扮殑璇彞濡備笅锛歞ouble a=2.0;printf ("%.2f", a);//鍏朵腑.2鎸囨槑涓や綅灏忔暟 璇存槑锛氬%9.2f 琛ㄧず杈撳嚭鍦哄涓9鐨勬诞鐐规暟, 鍏朵腑灏忔暟浣嶄负2, ...
绛旓細鍦ㄨ繖涓緥瀛愪腑锛%f 鏄printf鍑芥暟鐨勬牸寮忔帶鍒剁锛屽畠鍛婅瘔鍑芥暟鎺ヤ笅鏉ョ殑杈撳嚭搴旇鏄竴涓诞鐐规暟銆俷um鏄瓨鍌ㄦ诞鐐规暟鐨勫彉閲忥紝鍏跺间负3.14159銆傛渶鍚庯紝printf鍑芥暟灏嗘诞鐐规暟杈撳嚭鍒板睆骞曚笂锛屽姞涓婁竴涓崲琛岀銆傞渶瑕佹敞鎰忕殑鏄紝%f 鏍煎紡鎺у埗绗﹂粯璁ゆ寜鐓C璇█鐨鏍囧噯娴偣鏁版牸寮杈撳嚭娴偣鏁锛屽嵆灏忔暟鐐瑰悗6浣嶆湁鏁堟暟瀛楋紝淇濈暀涓や綅灏忔暟銆...
绛旓細绛旓細1.C璇█涓璸rintf杈撳嚭float鍜宒ouble閮藉彲浠ョ敤%f锛岃宒ouble鍨嬫暟鎹繕鍙互鐢%lf銆2.scanf褰撲腑鑻ユ槸瀵瑰弻绮惧害鐨勫彉閲忚祴鍊兼槸蹇呴』鏄%鍚庤窡lf,鑰printf褰撲腑鍙互鐢%f涔熷彲浠ョ敤%lf娌℃湁闄愬埗銆
绛旓細鍦C璇█涓锛printf() 鍑芥暟涓殑 %5.2f 鏄竴涓牸寮忚鏄庣锛岀敤浜庢牸寮忓寲娴偣鏁鐨杈撳嚭銆傝繖涓牸寮忚鏄庣鐨勫叿浣撳惈涔夊涓嬶細锛氭牸寮忚鏄庣鐨勮捣濮嬫爣蹇椼5锛氬瓧娈靛搴︼紝琛ㄧず杈撳嚭鐨勬渶灏忓瓧绗︽暟锛屽寘鎷暣鏁伴儴鍒嗐佸皬鏁扮偣鍜屽皬鏁伴儴鍒嗐傚湪杩欎釜渚嬪瓙涓紝瀹冩寚瀹氫簡杈撳嚭鐨勬诲搴︿负5涓瓧绗︺.锛氬皬鏁扮偣鐢ㄦ潵鍒嗛殧鏁存暟閮ㄥ垎鍜屽皬鏁伴儴鍒嗐
绛旓細浠g爜涓猴細include <stdio.h>void main(){float x,y;printf("璇疯緭鍏ラ暱鍜屽锛歕n");scanf("%f,%f",&f,&f); //鏀寔灏忔暟杈撳叆锛沺rintf("闈㈢Н涓:%.2f\n",x*y); //%.2f鎰忔濇槸鍙栧皬鏁扮偣鍚庝袱浣杈撳嚭锛沺rintf("鍛ㄩ暱涓:%.2f\n",(x+y)*2);} ...
绛旓細鍦C璇█涓锛屽鏋滀綘鎯宠杈撳嚭灏忔暟骞朵笖涓嶈繘琛屽洓鑸嶄簲鍏ワ紝浣犲彲浠ヤ娇鐢 printf 鍑芥暟鐨 %.nf 鏍煎紡璇存槑绗︼紝鍏朵腑 n 鏄綘鎯宠鐨勫皬鏁颁綅鏁般備緥濡傦紝濡傛灉浣犳兂杈撳嚭涓涓娴偣鏁骞朵笖淇濈暀 2 浣嶅皬鏁帮紝浣犲彲浠ヨ繖鏍峰仛锛氬湪杩欎釜渚嬪瓙涓紝%.2f 鍛婅瘔 printf 鍑芥暟浣犳兂瑕佽緭鍑轰竴涓诞鐐规暟骞朵笖淇濈暀 2 浣嶅皬鏁般傝繖涓嶄細杩涜鍥涜垗浜斿叆锛...
绛旓細float 涓哄崟绮惧害锛屾湁鏁堟暟瀛椾负6~7 double 涓哄弻绮惧害锛屾湁鏁堟暟瀛椾负15~16 浣嗕粬浠湪杈撳嚭鏃讹紝灏忔暟鐐瑰悗閮芥湁6浣嶅皬鏁般 濡傦細 main() { int a=15; float b=123.1234567; double c=12345678.1234567; char d='p'; printf("a=%d,%5d,%o,%x\n",a,a,a,a); printf("b=%f,%lf,%5...
绛旓細浠ヤ笅鏄竴涓 C 璇█绋嬪簭锛岀敤浜庤緭鍏ヤ竴涓娴偣鏁锛杈撳嚭瀹冪殑缁濆鍊煎苟淇濈暀涓や綅灏忔暟锛歚``c include <stdio.h> include <math.h> int main() { float num, abs_num;printf("璇疯緭鍏ヤ竴涓诞鐐规暟锛");scanf("%f", &num);// 璁$畻缁濆鍊 abs_num = fabs(num);// 杈撳嚭缁撴灉骞朵繚鐣欎袱浣嶅皬鏁 printf("...