格式化答案以确定C中正确的有效位数

时间:2014-11-02 17:00:28

标签: c formatting

例如,如果用户输入两个数字,例如12.5和101.2,在进行一些计算后,程序将返回一个带有3个sigfigs的数字,因为12.5具有最少的有效数字。

我首先需要确定每个数字有多少个sigfigs,然后使用printf语句中的格式说明符来使用sigfig规则返回答案。我知道您可以使用

之类的内容将其限制为特定的小数位数
printf(".2f",ans);

但如何将其限制为特定数量的位数

以下是您可以考虑重要数据的简单计算示例。

user inputs 12.5, 101.2
ans=101.2+12.5
return 114

答案通常是113.7,但由于12.5只有3位有效数字,程序必须将其四舍五入为114.

3 个答案:

答案 0 :(得分:3)

printf()格式说明符%g之一可以指定最大有效位数。从C11(N1570草案)7.21.6.1/4(强调我的):

  

提供最小位数的可选精度   出现在d,i,o,u,x和X转换中,数字位数   出现在a,a,e,E,f和F的小数点字符之后   转化次数, g和G的最大有效位数   转化,...

因此,在您的情况下,可以将结果限制为三个有效数字,如:

#include <stdio.h>

int main(void)
{
    double ans = 101.2 + 12.5;

    printf("%.3g\n", ans);

    return 0;
}

结果:

114

但请注意%g可能会在其他一些情况下选择科学记数法。

答案 1 :(得分:0)

根据规格,您不能以这种方式格式化数字。 printf -

Minimum number of characters to be printed. If the value to be printed is shorter than this number, the result is padded with blank spaces.
The value is not truncated even if the result is larger.

您需要提供自己的函数来“部分”打印浮点变量的sigfigs。

答案 2 :(得分:0)

格式说明符%e强制使用科学记数法。使用精度来强制有效位数。例如,

printf("%.2e\n", 101.2+12.5);

输出

1.14e+02