使用printf舍入到最接近的十

时间:2013-06-28 18:01:32

标签: c printf c99

给予printf的浮点值的精度说明符允许程序员指定小数位后要打印的位数。 printf是否具有类似的精度说明符,允许程序员指定在小数点之前的位数来对该值进行舍入?

例如,如果我将157传递给printf,我希望将值160打印到屏幕上,如果我告诉它转到最近的十< / em>的

4 个答案:

答案 0 :(得分:4)

据我所知,没有办法让printf做到这一点。在将值传递给printf之前,您必须手动舍入值。例如:

printf("%d\n", myRound(157, 10));

int myRound(int x, int b) {
    return ((x + b/2) / b) * b;  // TODO: handling for overflow, etc.
}

答案 1 :(得分:3)

printf不会改变数据,格式说明符只指定它的显示方式。如果您提供printf 157,则会以某种形式打印157

检查C math library中的舍入函数是否有舍入函数。

答案 2 :(得分:1)

没有。你可以用printf得到的最接近的是使用科学记数法:

printf("%.1e\n", 157.0);

这将打印1.6e+02,这绝对不是你想要的。

答案 3 :(得分:0)

我喜欢myRound(157, 10)解决方案,但我想我会添加:

printf("%d0\n", (n+5)/10);   // int n;
printf("%.0f0\n", x/10);     // double x; (fails for INF, NAN)