c - 格式化答案以正确使用 C 中的有效数字位数

标签 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。

最佳答案

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

An optional precision that gives the minimum number of digits to appear for the d, i, o, u, x, and X conversions, the number of digits to appear after the decimal-point character for a, A, e, E, f, and F conversions, the maximum number of significant digits for the g and G conversions, ...

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

#include <stdio.h>

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

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

    return 0;
}

结果:

114

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

关于c - 格式化答案以正确使用 C 中的有效数字位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26701919/

相关文章:

c - 此汇编 x86 代码的反编译 (C) 代码构造是什么?

C - 获取IPC共享内存信息

python - 如何将文本文件中的某些单词大写?

java - 如何在键入时设置文本字段内容的格式

c - Makefile: '_start'的多重定义

c - 读取设备状态报告 ANSI 转义序列回复

c++ - 核密度估计器(使用高斯核)和 f(x) = 1?

c - 如何将循环输出中的字符居中?

java - DateTimeFormatter 自动更正无效(语法上可能)的日历日期

java - Android:从 Assets 文件夹中读取并格式化文本