当我们使用 printf() 函数输出浮点数时,C语言默认会对小数进行四舍五入,例如:
#include <stdio.h> int main() { float number = 3.14159; printf("%.2f\n", number); return 0; }输出结果为:
3.14可以看到,原本的 3.14159 被四舍五入为 3.14,在某些情况下,这种四舍五入可能会导致数据失真或计算误差。
解决方案
要禁止 printf() 函数对小数进行四舍五入,我们可以使用 printf() 的格式化字符串中的精度控制符。具体来说,我们可以使用%.nf
格式,其中 n 表示要显示的小数位数,并在 n 前面加上一个负号。 这里是一个修改后的示例:
#include <stdio.h> int main() { float number = 3.14159; printf("%.-2f\n", number); return 0; }输出结果为:
3.14在这个例子中,我们使用了 %.-2f 格式化字符串。负号告诉 printf() 函数不要进行四舍五入,而是直接截断小数部分。
如果需要更精确的控制,我们可以使用
%.*f
格式,并通过参数来指定小数位数,这种方法允许我们在运行时动态决定要显示的小数位数。 示例代码如下:
#include <stdio.h> int main() { float number = 3.14159; int decimal_places = 4; printf("%.*f\n", decimal_places, number); return 0; }输出结果为:
3.1415在这个例子中,我们使用 %.*f 格式,并通过 decimal_places 变量来控制小数位数。这种方法给了我们更大的灵活性,可以根据需要调整输出的精度。