例如,如果用户输入两个数字,例如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。
其中一个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在其他一些情况下可能会选择科学记数法。
| 归档时间: |
|
| 查看次数: |
3823 次 |
| 最近记录: |