C语言取近似值的方法(四舍五入)总结

加数乘积求商取舍法

基本原理阐释

任取一个数,以我的生日为蓝本取1998.1120,可以发现这是一个四位小数(保留0),假如要保留三位小数,常规方法是人为四舍五入,但计算机不能和人一样直接进行处理,需要给计算机提供一个算法来让计算机实现四舍五入,因此我认为可以这样做:

  • 保留三位小数:(1998.1120+0.0005)*1000=1998112.5, 对199811.25进行强制类型转换取整得1998112,再除以1000即得1998.112,结果正确;

  • 保留两位小数:(1998.1120+0.0055)*100=199811.75,进行强制类型转换得199811,除以100得1998.11,结果正确;

  • 保留一位小数:(1998.1120+0.0555)*10=19981.675,进行强制类型转换得19981,除以10得1998.1,结果正确;

  • 保留0位小数:(1998.1120+0.5555)*1=1998.6675,进行强制类型转换得1998,除以1得1998,结果正确;

结论

对上述操作进行归纳总结可以得出这样一个结论:对于n位小数,若要保留m(m<=n)位小数,则需要加0.0···5···,共m个0,n-m个5,然后再乘10···(n个0),进行强制类型转换取整后再除以相同的数所得结果即为正确的四舍五入后的数。

代码实现

我在拿多个数尝试之后发现方法可行,于是尝试用代码实现该过程,通过程序来进一步测试该方法是否可行,具体代码如下:

#include <stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, const char * argv[]) {
   
    double num;
    int temp,count1=0,i,count2=0,n,flag=0;
    
    printf("请输入需要取近似值的小数:");
    scanf("%lf",&num);//假设输入为10.254 
    //当num为负数时将其转为正数处理,引入检测变量flag为以后还原做准备 
    if(num<0){
   
    	num=fabs(num);
    	flag=1;
	}
	//计算num的整数位数 ,count1=2 
    temp=(int)num;
	while(temp!=0){
   
		temp/=10;
		count1++;
	} 
	//将num转换为字符串形式,s[50]="10.254000" 
	char s[50];
	sprintf(s,"%f",num);
	
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值