2017-09-21 72 views
0

嗨,我想檢查我怎麼能限制的位數爲我float值只有3位。基本上以下是我的代碼總和和平均年齡。總和是整數,而平均值是浮動的。但是我想限制在我的平均年齡只有3位數字。我嘗試使用%.2f但如果平均年齡超過10的話,我將在我最後的答案4個位數。請幫助我。提前致謝。限制我浮到只有3位

printf("The total age of the 5 individuals are %d\n", sum); 
printf("The average age of the 5 individuals are %.2f", average); 

回答

0

%.2f表示逗號後的2位數字。 也許有更好的東西,但它的工作原理:

float average = 10,1498; //Example 

if (average < 10) { 
    printf("The average age of the 5 individuals are %.2f", average); 
else 
    printf("The average age of the 5 individuals are %.1f", average); 
} 
0

限制我浮到只有3位

到極限,我想打印10.0爲「10」符合目標爲數字計數被限於至3(作爲一個上限)。

步驟1打印用"%e"爲字符串3個顯著位數。

char buf[20]; 
sprintf(buf, "%0.2e", average); 

第2步將該字符串轉換爲double

atof(buf); 

步驟3打印使用「%克」作爲將不打印不需要的尾隨零

char buf[20]; 
sprintf(buf, "%0.2e", 1.234); printf("average %g\n", atof(buf)); 
sprintf(buf, "%0.2e", 1.236); printf("average %g\n", atof(buf)); 
sprintf(buf, "%0.2e", 9.994); printf("average %g\n", atof(buf)); 
sprintf(buf, "%0.2e", 9.997); printf("average %g\n", atof(buf)); 
sprintf(buf, "%0.2e",10.04); printf("average %g\n", atof(buf)); 
sprintf(buf, "%0.2e",12.345); printf("average %g\n", atof(buf)); 

輸出

average 1.23 
average 1.24 
average 9.99 
average 10 
average 10 
average 12.3 

這種方法雖然可以不符合OP目標如果平均是< 1 like 0.123


要小心嘗試,否則做文本處理舍入一個字符串。 9.99x和99.9x附近的邊緣情況僅僅使用文本操作是具有挑戰性的。

數字解決方案可以使用,但可能無法按照所需的值對非常接近並取決於當前舍入模式。

if (average < 9.995) { 
    digs = 2; 
} else if (average < 99.95) { 
    digs = 1; 
} else { 
    digs = 0; 

printf("The average age of the 5 individuals are %.*f", digs, average); 

試圖圓,然後通過代碼打印averageif (average < 9.995) { average = round(average*100)/100; printf("%.2f", average);可能遭受同樣的問題非常接近邊界值。