给予printf
的浮点值的精度说明符允许程序员指定>小数位后要打印的位数。 printf
是否具有类似的精度说明符,允许程序员指定在小数点之前的位数来对该值进行舍入?
例如,如果我将157
传递给printf
,我希望将值160
打印到屏幕上,如果我告诉它转到最近的十< / em>的
答案 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)