限制我浮到只有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);
試圖圓,然後通過代碼打印average
像if (average < 9.995) { average = round(average*100)/100; printf("%.2f", average);
可能遭受同樣的問題非常接近邊界值。