我正在编写一个简单的程序来散布数字。当我输入1.4(给我1.0)或2.6(给我3.0)之类的东西时,它可以正常工作。但是当我输入1.45时,它应该给我1.5,但它打印1.0。或为2.85(应为2.9,它打印3.0)。我如何做这项工作?我无法使用任何功能。
#include<stdio.h>
const float add = 0.5;
int main(void)
{
float v;
printf("Please enter a value to be rounded: ");
scanf("%f", &v);
v = v + add;
v = (int)v;
printf("The rounded value is %.2f", v);
return 0;
}
尝试此代码。您需要将浮动价值分解为模量和股息。
#include<stdio.h>
int main(void)
{
float v;
int con, r_value, mul;
printf("Please enter a value to be rounded: ");
scanf("%f", &v);
mul=v*10;
con=mul%10;
r_value=mul/10;
if(con>=5)
r_value=r_value+1;
else
r_value=r_value;
printf("The rounded value is %.2d", r_value);
return 0;
}
上面的代码被修改为用于负数。
float v;
int con, r_value, mul;
printf("Please enter a value to be rounded: ");
scanf("%f", &v);
mul=v*10;
con=mul%10;
r_value=mul/10;
if(v>0)
{
if(con>=5)
r_value=r_value+1;
else
r_value=r_value;
}
else if (v<0)
{
if(con<=-5)
r_value=r_value-1;
else
r_value=r_value;
}
printf("The rounded value is %.2d", r_value);
int值只是在小数点之后删除值
在您给出 2.45
时2.45 0.5 = 2.95
将其四舍五入到2(2.0,因为您要求精度),即十进制零件被截断未舍入。
ints没有十进制位置,因此从float到int的铸件然后返回浮点只会留下整数值。
您的主题(四舍五入到第二个小数位)与您的问题(基于输入的任意位置)与您的问题不符。这使得很难正确回答您的问题。
也就是说,您的代码
v = v + 0.5;
v = (int)v;
将把一个数字舍入到最近的整数。我不确定为什么您希望int
演员会做其他任何事情。
您正在使用v = (int)v;
,它如何给1.5
用于1.45
的输入。
要获得想要的东西,您只需打印小数位数比原始数字少1个,即假设您的2.455
具有3个小数位数,您只需使用%.2f
即可打印该号码,并且它将自动舍入。
您可以做:
printf("%.2f", ((int)(v * 100 + 0.5) / 100.0));