“四舍六入五成双规则” 与 C语言如何实现“四舍五入”
1、四舍六入五成双规则
对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是“四舍六入五成双”,也即“4舍6入5凑偶”这里“四”是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有有效数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为 奇数,舍5入1;②5前为偶数,舍5不进。(0是 偶数)
测试1代码:
void test_1(void)
{
/*
四舍六入五成双规则:
对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,
这种修约(舍入)规则是“四舍六入五成双”,也即“4舍6入5凑偶”这里“四”是指≤4 时舍去,
"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有有效数时,舍5入1;当5后无有效数字
时,需要分两种情况来讲:①5前为 奇数,舍5入1;②5前为偶数,舍5不进。(0是 偶数)
下面举例,用上述规则对下列数据保留3位有效数字:
*/
float aa_1 = 9.8249; // 9.82
float aa_2 = 9.82671; // 9.83
float bb_1 = 9.8250; // 9.82
float bb_2 = 9.8350; // 9.84
float cc_1 = 9.8351; // 9.84
float cc_2 = 9.82501; // 9.83
printf("%.2f\n", aa_1);
printf("%.2f\n", aa_2);
printf("%.2f\n", bb_1);
printf("%.2f\n", bb_2);
printf("%.2f\n", cc_1);
printf("%.2f\n", cc_2);
}
测试1结果:
2、C语言实现“四舍五入”
2.1、使用round(x)函数返回x的四舍五入整数值
测试2代码:
void test_2(void)
{
float a = 23.456789;
float b = 23.56789;
int y;
//scanf_s("%f", &x);
y = round(a);
printf("%d\n", y);
y = round(b);
printf("%d\n", y);
}
测试2结果:
2.2、我们知道,C语言中去除小数位采用的方法就是强制性转化成整型类型。那么假如我们要对一个小数保留三个小数位而第四个小数位按照四舍五入的规则进行,
该怎样实现呢?很简单,我们将数字扩大1000倍,使得第四位小数称为新数字的第一位,然后我们可以给它加上0.5后再进行强制性转化。加0.5的原因就是:
假如这个小数位的数值大于5,加上0.5能够实现进位的作用,倘若小于0.5,就没有实现进位的作用。如此,就能实现小数位的四舍五入。然后我们再对这个数值
进行强制性转化,然后再处以1000.0(记住,一定要1000.0,否则就会出现隐式转化),在输出的时候用%0.3f以实现保留三位小数。
测试3代码:
//对一个小数保留三个小数位
int test_3(void) {
float a = 12.345678;
//scanf_s("%f", &a);
a = (int)(a * 1000 + 0.5) / 1000.0;
printf("%0.3f\n", a);
return 0;
}
测试3结果: