2015-06-23 23 views
6

使用sprintf和一般語法"%A.B"我可以這樣做:集精密動態使用的sprintf

double a = 0.0000005l; 
char myNumber[50]; 
sprintf(myNumber,"%.2lf",a); 

我可以在格式字符串設定A和B的動態?

+1

是的,你可以看到例如[這個'printf'(和家庭)參考](http://en.cppreference.com/w/c/io/fprintf)。 –

+1

或者,格式字符串本身也可以通過對sprintf的另一個調用來創建。 – Lundin

回答

9

是的,你可以做到這一點。您需要使用星號*作爲字段寬度,並使用.*作爲精度。然後,您需要提供帶有這些值的參數。喜歡的東西

sprintf(myNumber,"%*.*lf",A,B,a); 

注:AB必須int類型。從C11標準,章§7.21.6.1,fprintf()功能

...場寬度,或精度,或兩者,可以用星號來表示。在 這種情況下,一個int參數提供字段寬度或精度。指定字段寬度或精度或兩者的參數應在要轉換的參數(如果有)之前出現(按該順序)。負字段寬度參數被視爲-標誌,後跟正字段寬度。採用負精度參數,就像精度被省略一樣。