您好我想检查一下如何将浮点值的位数限制为仅3位数。基本上以下是我的总和和平均年龄的代码。 Sum是整数,而average是float。但是我希望将它限制在我平均年龄的3位数。我尝试使用%.2f,但如果平均年龄超过10,那么我的最终答案将有4位数。请帮帮我。非常感谢。
printf("The total age of the 5 individuals are %d\n", sum);
printf("The average age of the 5 individuals are %.2f", average);
答案 0 :(得分: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);
}
答案 1 :(得分:0)
将我的浮动限制为仅3 DIGITS
通过限制,我假设打印10.0为&#34; 10&#34;符合目标,因为数字计数限制为3(作为上限)。
步骤1使用"%e"
打印带有3位有效数字的数字到字符串。
char buf[20];
sprintf(buf, "%0.2e", average);
步骤2将该字符串转换为double
。
atof(buf);
步骤3使用&#34;%g&#34;打印因为这不会打印不需要的尾随零
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
如果平均值<&lt;
这种方法可能不符合OP目标。 1喜欢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);
可能会对非常靠近边界的值产生同样的问题。