在C语言中,如何精确舍入双精度的零
我有一个程序,可以添加两个数字,但我希望它能够显示准确的数字,而不显示零。例如,我添加了13.4和10.05。它将显示23.45万。如何使其显示23.45而不使用%.2lf。我不能使用%.2lf,因为如果我加上12.4和10.1,它将显示22.50,但它只需要显示22.5。很抱歉英语不好。下面的内容并不是一个完整的解决方案,但提供了一些关于如何解决问题的提示 你想要的只是通过计算你的输入数字有多少个小数位数来实现——这决定了你需要在输出中有多少个小数位数。显然,只有当你有数字的字符串表示时,这才有效在C语言中,如何精确舍入双精度的零,c,C,我有一个程序,可以添加两个数字,但我希望它能够显示准确的数字,而不显示零。例如,我添加了13.4和10.05。它将显示23.45万。如何使其显示23.45而不使用%.2lf。我不能使用%.2lf,因为如果我加上12.4和10.1,它将显示22.50,但它只需要显示22.5。很抱歉英语不好。下面的内容并不是一个完整的解决方案,但提供了一些关于如何解决问题的提示 你想要的只是通过计算你的输入数字有多少个小数位数来实现——这决定了你需要在输出中有多少个小数位数。显然,只有当你有数字的字符串表示时,这才
/* necessary casts removed for clarity */
int fractionalDigs1 = arg1 + strlen(arg1) - strchr (arg1, '.') - 1;
int fractionalDigs2 = arg2 + strlen(arg2) - strchr (arg2, '.') - 1;
对于两个数字的加法,您需要让输出分数位数计算两个输入参数分数的最大值,以便将总和相乘—由您决定
int fractionalDigsOut = max (fractionalDigs1, fractionalDigs2);
具有非恒定字段宽度的输出与字段宽度格式说明符*
类似(*
从参数列表中获取参数并将其用作字段宽度):
“它表明”是使用什么的手段
printf()
?22.5
与22.50
不同,因为22.5
例如也可以是22.49
或22.51
四舍五入。因此,如果您实际拥有22.50
,则显示22.5
将失去精度(“信息”)。如果您有22.50
,为什么要显示22.5
?为什么要避免%.2lf
格式?
printf ("%8.*f", fractionalDigitsOut, num);