C语言中浮点数四舍五入的规则到底是怎样的呢?
下面用一个案例告诉大家,相信你就可以明白了。
描述
将浮点数转换为整数类型,要求四舍五入。
输入描述:
随机输入的浮点数
输出描述:
四舍五入之后的整数
示例1
输入:14.99
输出:15
示例2
输入:-2.5
输出:-3
下面列举两种方法。
方法1:
思路分析:
1.定义一个浮点型变量存放输入的小数
2.要将输入的小数四舍五入后输出,那么首先就要有输入,我们用scanf()接收输入,占位符要使用浮点数相对应的占位符
3.可以选择用printf()控制格式保留小数点后0位来输出四舍五入后的结果
代码实现:
#include <stdio.h>
int main()
{
float x = 0.0;
scanf("%f", &x);
printf("%0.0f\n", x);//输出最小宽度为0,小数点后0位
return 0;
}
运行结果:
上述方法在输入2.5时,得到四舍五入的结果却是2,那这是为什么呢?其实,在C语言中用printf()的格式控制浮点数的四舍五入的规则是:
1.若输入数的,小数部分>5,则“入”;
2.若输入数的,小数部分<5,则“舍”;
3.若输入数的,小数部分=5,则判断整数部分的奇偶,整数部分为奇数:“入”,整数部分为偶数:“舍”;
也就是说上述的方法是存在不符合数学中的四舍五入的情况的,若果想要完全符合数学中的四舍五入,那么就不得不考虑使用其他的方法了,例如下面的方法2。
方法2:
思路分析:
1.定义一个浮点型的变量存放输入的小数
2.定义一个整型变量,用于存放所输入数的整数部分
3.如果输入的数 - 0.5 >= 所输入数的整数部分,则应该“入”,否则“舍”
4.当然,还应该分为输入的数大于0和小于0两种情况
代码实现:
#include <stdio.h>
int main()
{
float x = 0;
scanf("%f", &x);//输入一个小数
if (x > 0)
{
int a = (int)x;//存放所输入数的整数部分
if (x - 0.5 >= a)
{
printf("%d\n", a + 1);//“入”
}
else
{
printf("%d\n", a);//“舍”
}
}
if (x < 0)
{
int a = (int)x;//存放所输入数的整数部分
if (x + 0.5 <= a)
{
printf("%d\n", a - 1);//“入”
}
else
{
printf("%d\n", a);//“舍”
}
}
return 0;
}
运行结果:
至此本文就结束了,如果你还有其他的更好、更加简洁的方法的话,欢迎留言评论!
希望对你有所帮助!