将我的浮动限制为仅3个DIGITS

时间:2017-09-21 03:05:41

标签: c

您好我想检查一下如何将浮点值的位数限制为仅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);

2 个答案:

答案 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);可能会对非常靠近边界的值产生同样的问题。