天天看點

四舍六入五平均

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include "../apue.2e/include/apue.h"

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <signal.h>
#include <assert.h>
#include <string.h>
#include <limits.h>

void test_1(void)
{
	/*
	四舍六入五成雙規則:
	對于位數很多的近似數,當有效位數确定後,其後面多餘的數字應該舍去,隻保留有效數字最末一位,
	這種修約(舍入)規則是“四舍六入五成雙”,也即“4舍6入5湊偶”這裡“四”是指≤4 時舍去,
	"六"是指≥6時進上,"五"指的是根據5後面的數字來定,當5後有有效數時(cc_1/cc_2),舍5入1;當5後無有效數字
	時(bb_1/bb_2),需要分兩種情況來講:①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);

	printf("===================\n");

	char xx_1[8];
	char xx_2[8];

	char yy_1[8];
	char yy_2[8];

	char zz_1[8];
	char zz_2[8];

	sprintf(xx_1, "%.2f\n", aa_1);
	sprintf(xx_2, "%.2f\n", aa_2);
	sprintf(yy_1, "%.2f\n", bb_1);
	sprintf(yy_2, "%.2f\n", bb_2);
	sprintf(zz_1, "%.2f\n", cc_1);
	sprintf(zz_2, "%.2f\n", cc_2);

	printf(xx_1);
	printf(xx_2);
	printf(yy_1);
	printf(yy_2);
	printf(zz_1);
	printf(zz_2);

}

int main(int argc, char* argv[])
{
	test_1();
	return;
}