是否可以仅使用printf语句对double进行舍入?

时间:2009-09-30 20:43:29

标签: c rounding

显然这只是代码的一小部分。

printf("Please enter a positive number that has a fractional part with three or more decimal places\n");
scanf("%5.2d", &x);
printf("The number you have entered is %5.2d\n" ,x);

这会自动舍入我输入的号码吗?还是有另一种方法可以做到这一点吗?

编辑:

printf("Please enter a positive number that has a fractional part with three or more decimal places\n");
scanf("%lf", &x);
x = x + 0.05;
printf( "The number you have entered is %5.2lf\n", x);

我做过这个,但我考虑到有人对printf所说的只是“改变”它的读出方式。所以这显然不是正确的方法。我应该实现pow()函数吗?这会以某种方式解决这个问题吗?

Edit2:

printf("Please enter a positive number that has a fractional part with three or more decimal places\n");
scanf("%lf", &x);
x = x + 0.05;
printf( "The number you have entered is %5.2lf\n", x);

好吧,如果我输入一个数字,它就会变成一个整数。 35.21将转为35,而35.51将转为36等。等

我如何得到35.2178到35.22,并且35.2135回合到35.21。 我如何获得小数的某些权力而不是整数呢?

5 个答案:

答案 0 :(得分:4)

你真的,真的不应该在浮点变量中存储“舍入”值。浮点不准确会破坏这一点 - 你的5.10可能会变成5.099999999941892,因为实现可能无法准确存储5.10。

作为替代方案,读取整数,将其乘以100并将其转换为int(将其舍入为零)。这将使您的计算准确。

答案 1 :(得分:3)

%.2f”会将双倍数字变为2位数。 double不是整数,%d%f不可互换。

答案 2 :(得分:1)

{

float x;
float rounded_x;

printf("Please enter a positive number that has a fractional part with three or more decimal places\n");
scanf("%f", &x);
rounded_x = ((int)(x * 100 + .5) / 100.0);

printf( "The number you have entered is %.2f\n", rounded_x);
return 0;

}

感谢所有想要帮助的人!我终于明白了

答案 3 :(得分:0)

这没有意义

scanf("%5.2d", &x);

在decmal点之后,你不能有一个带数字的整数。如果x是一个单位,那么就会发生奇怪的事情。如果它是一个整数,为什么你在printf中的小数点后2位。

你究竟想做什么?

编辑:

double x;
printf( "Please enter a positive number that has a fractional part with three or more decimal places\n" );
scanf( "%lf", &x );
printf( "The number you have entered is %5.2f\n", x + 0.005 );

我很确定printf只会截断。因此,您需要添加0.005才能围绕它。

答案 4 :(得分:0)

printf不会更改数字的值,只会更改数字的显示方式。另一种选择是

#include <math.h>

// round  double x  to 2 decimal places
x = 0.01 * floor(x * 100.0 + 0.5);