C程序为圆形数字,四舍五入后四舍五入到第二位置

时间:2014-01-27 04:28:57

标签: c numbers rounding

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

6 个答案:

答案 0 :(得分:2)

试试这段代码。您需要将浮动值分解为模数和红利。

#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);  

答案 1 :(得分:0)

Int值只是删除小数点后的值,它不会舍入到最接近的数字

在您提供 2.45

的情况下

2.45 + 0.5 = 2.95

它四舍五入为2(自要求精度以来为2.0),即小数部分被截断而不是四舍五入。

答案 2 :(得分:0)

Ints没有小数位,所以从float到int然后再返回float只会留下整数值。

答案 3 :(得分:0)

您的主题(四舍五入到小数点后第二位)与您的问题不符(根据输入舍入到任意位置)。这使得很难正确回答你的问题。

那说,你的代码

 v = v + 0.5;
 v = (int)v;

将数字舍入到最接近的整数。我不确定你为什么期望int演员做其他任何事情。

答案 4 :(得分:0)

你可以这样做:

printf("%.2f", ((int)(v * 100 + 0.5) / 100.0));

答案 5 :(得分:0)

您正在使用v = (int)v;,它如何为1.5输入1.45

为了得到你想要的东西,你可以打印小于原始的十进制数字,即 假设你有2.455有3个十进制数字,你可以使用%.2f打印该数字,它将自动舍入。

相关问题