程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言中格式化輸出的轉換說明的fldwidth和precision解析,fldwidthprecision

C語言中格式化輸出的轉換說明的fldwidth和precision解析,fldwidthprecision

編輯:關於C語言

C語言中格式化輸出的轉換說明的fldwidth和precision解析,fldwidthprecision


  首先說什麼是C語言的格式化輸出,就是printf和它的幾個變種(grep -E "v?(sn|s|f)printf")。像這些函數都有一個參數format,format中可以加點轉換說明,讓輸出更加規整!而這個轉換說明是由這幾部分組成的:

  %[flags][fldwidth][precision][lenmodifier]convtype

  本文著重講的是fldwidth和precision部分,其他部分可以參考《C Primer Plus》第五版4.4節!

  首先說那個fldwidth,這個全稱叫做field width,域寬度,就是最終轉換出來的字符的最小寬度。注意最小這個形容詞,它的意思就是不夠會補空格或者0,多了就多了,不截短!

  而那個precision代表的是精度,以一個小數點開始。關於它的作用,APUE(5.11節1部分)上是這麼講的,precision說明整型轉換後最少輸出的數字位數,浮點數轉換後小數點後的最少位數,字符串轉換後的最大字符數!關於浮點數的那個最小(我標記的藍色部分)我感覺有點疑問,因為浮點數如果超出了那個值會被截短啊!

  OK,理論就是這些了,接下來我們煮個栗子!比如說下面這段代碼:

  

  首先說那個浮點數的printf,小數點前那個數字是fldwidth,表示最終的整體寬度為11個字符的寬度。而那個3就是precision,表示浮點數小數點後保留3位,所以那個4就被四捨五入了!理論上應該輸出5223.332的,可是這裡輸出了個5223.333,這裡我還沒想明白,哪位若是了解內情,還望不吝賜教!

  再來看那個整型數的printf,這裡fldwidth還是11,所以最終整體寬度和上面那個相同,這裡的precision變成了8,就是這個整型數至少要輸出8位,可是不夠咋辦,那就在前面補零啊!所以我們看到的最終結果就是00030000了!

  最後來看那個字符串的printf,這裡fldwidth和上面相同,那個precision是8,這裡表示輸出的字符串最長只能是8,可是我這個str很不爭氣,這裡竟然超過了,沒辦法,只好截短喽!所以Hello,World!就變成了Hello,Wo了!

 

  OK,這就是關於格式轉換說明的fldwidth和precision就是這些了,這裡由於我的水平有限,那個浮點數的四捨五入還沒想明白,以後想明白了再來改正!還望見諒!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved