显然这只是代码的一小部分。
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。 我如何获得小数的某些权力而不是整数呢?
答案 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);