我正在编写一个简单的程序来舍入数字。当我输入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;
}
答案 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
打印该数字,它将自动舍入。