近日,发现小数四舍五入写代码有问题,遂网络上查了下资料,记录下来以便日后查询。
原理:放大数据,再利用运算符的优先级处理。
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