标签:
近日,发现小数四舍五入写代码有问题,遂网络上查了下资料,记录下来以便日后查询。
原理:放大数据,再利用运算符的优先级处理。
1.首先,得知道,运算优先级,括号→转换→乘除加减。
2.两种方式,主要是放大倍数不同。
㈠平方实现:
#include <stdio.h> long powe(long n); int main(void) { long t; //过渡量 long i = 3; //精度,小数点后几位。 float h = 11.5555; //需要进行四舍五入的数 t = (long)((h*powe(i+1)+5)/10.0); h = (float)t/powe(i); printf("%f",h); return 0; } long powe(long n) //平方 { long x=1; if(n>0) x = 10*powe(--n); else return 1; return x; }
㈡加法实现:
#include <stdio.h> double powe(double n); int main(void) { double x = 11.55556666; //需四舍五入的数 double i = 3; //精度 double y = 0; //结果 y = 0.01*1.0/powe(i)*(int)(100.0*powe(i)*(x+0.005*1.0/powe(i)));//默认小数点后一位 printf("%f",y); return 0; } double powe(double n) { --n; double s = 0; if(--n>0) s = 10*powe(--n); else return 1; return s; }
总结:
以上两种方式都是针对小数点后几位进行四舍五入,第一种方式优点在于负数也能进行,第二种则不能。但需注意的是,在第一种方式中隐形转换对其影响大,个人推荐使用第二种方式。
标签:
原文地址:http://www.cnblogs.com/chenmou/p/4928569.html