C计划到圆数,在小数位后舍入到第二位



我正在编写一个简单的程序来散布数字。当我输入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));

最新更新