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

sla*_*yer 5 c formatting

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

我首先需要确定每个数字有多少个sigfig,然后在printf语句中使用格式说明符使用sigfig规则返回答案。我知道您可以使用以下方法将其限制为特定的小数位数

printf(".2f",ans);
Run Code Online (Sandbox Code Playgroud)

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

这是一个简单计算的示例,您可以考虑大量数字。

user inputs 12.5, 101.2
ans=101.2+12.5
return 114
Run Code Online (Sandbox Code Playgroud)

答案通常是113.7,但是由于12.5只有3个有效数字,因此程序必须将其舍入到114。

Grz*_*ski 5

其中一个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;
}
Run Code Online (Sandbox Code Playgroud)

结果:

114
Run Code Online (Sandbox Code Playgroud)

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