C语言小数四舍五入输出可控制位数
2017-01-05 10:31
281 查看
本文章说明怎样使得你能保留小数点后几位(四舍五入)及其可控制的位数的实现:
#include <stdio.h>
int main()
{
double a = 423.43654;
a = int(a*100+0.5)/100.0; //到这的a值变成了423.440000
printf("%lf\n", a); //以小数后两位的形式输出
return 0;
}
运行结果:
423.44
负数的情况:
#include <stdio.h>
int main()
{
double a = -423.43654;
a = int(a*100-0.5)/100.0; //到这的a值变成了-423.440000
printf("%.2lf\n", a); //以小数后两位的形式输出
return 0;
}
运行结果:
-423.44
由上面两个实例可以看出区别,正负数都能得到相应的结果。
原理是:比如当一个数要保留n位时,我们可以先将其乘上10的n次方在加减去0.5,然后除以10的n次方(后面的.0不能省略,因为这保证了最后运算出来的是个小数)。
拿上面的实例来说吧:
(423.43654*100+0.5)/100 == 423.440000,也就是说这一步的运算已经将位数(两位)确定,而后面没保留的位数变为零了,最后我们要做的就是将它以两位小数的形式输出(%.2lf)。
下面我介绍一种可以自己输入控制保留位数的实现方法:
#include <stdio.h>
#include <math.h>
int main()
{
double a;
int bit;
printf("请输入你想要四舍五入的小数:\n");
scanf("%lf", &a);
printf("请输入你想要保留的位数:\n");
scanf("%d", &bit);
if (a > 0)
{
a = int(a*pow(double(10), double(bit))+0.5)/pow(double(10), double(bit))/1.0;
}
else
{
a = int(a*pow(double(10), double(bit))-0.5)/pow(double(10), double(bit))/1.0;
}
printf("%.*lf\n", bit, a); //精度控制处的*代表读取一个int型参数并把它当做精度,即读取bit
return 0;
}
运行结果:
请输入你想要四舍五入的小数:
21.124685
请输入你想要保留的位数:
3
21.125
and
请输入你想要四舍五入的小数:
-21.124685
请输入你想要保留的位数:
3
-21.125
总结:这样就可以实现可控制的小数位数输出。
ps:如果我有错误的地方还是有什么好的方法实现,请告诉我,我会改进。谢谢。
#include <stdio.h>
int main()
{
double a = 423.43654;
a = int(a*100+0.5)/100.0; //到这的a值变成了423.440000
printf("%lf\n", a); //以小数后两位的形式输出
return 0;
}
运行结果:
423.44
负数的情况:
#include <stdio.h>
int main()
{
double a = -423.43654;
a = int(a*100-0.5)/100.0; //到这的a值变成了-423.440000
printf("%.2lf\n", a); //以小数后两位的形式输出
return 0;
}
运行结果:
-423.44
由上面两个实例可以看出区别,正负数都能得到相应的结果。
原理是:比如当一个数要保留n位时,我们可以先将其乘上10的n次方在加减去0.5,然后除以10的n次方(后面的.0不能省略,因为这保证了最后运算出来的是个小数)。
拿上面的实例来说吧:
(423.43654*100+0.5)/100 == 423.440000,也就是说这一步的运算已经将位数(两位)确定,而后面没保留的位数变为零了,最后我们要做的就是将它以两位小数的形式输出(%.2lf)。
下面我介绍一种可以自己输入控制保留位数的实现方法:
#include <stdio.h>
#include <math.h>
int main()
{
double a;
int bit;
printf("请输入你想要四舍五入的小数:\n");
scanf("%lf", &a);
printf("请输入你想要保留的位数:\n");
scanf("%d", &bit);
if (a > 0)
{
a = int(a*pow(double(10), double(bit))+0.5)/pow(double(10), double(bit))/1.0;
}
else
{
a = int(a*pow(double(10), double(bit))-0.5)/pow(double(10), double(bit))/1.0;
}
printf("%.*lf\n", bit, a); //精度控制处的*代表读取一个int型参数并把它当做精度,即读取bit
return 0;
}
运行结果:
请输入你想要四舍五入的小数:
21.124685
请输入你想要保留的位数:
3
21.125
and
请输入你想要四舍五入的小数:
-21.124685
请输入你想要保留的位数:
3
-21.125
总结:这样就可以实现可控制的小数位数输出。
ps:如果我有错误的地方还是有什么好的方法实现,请告诉我,我会改进。谢谢。
相关文章推荐
- C语言如何控制小数位数
- C++ 对于输出小数的位数控制+C++对集合的操作(交、并、差)
- c语言:用%f输出实数,只能得到6位小数及求float型数据的有效位数
- C++ 小数位数输出控制方法
- c语言:用%f输出实数,只能得到6位小数及求float型数据的有效位数
- java 控制输出小数位数
- 用cout控制输出小数的位数
- C语言控制输出小数点位数
- iOS输出数值控制位数(小数、整数)
- C++使用fixed和precision控制小数和有效位数的输出
- C语言printf(""),浮点数打印保留有效位数,小数部分的四舍五入
- c++中输出小数格式控制(c++中怎么控制浮点型小数点后输出的位数)
- c语言控制输出格式-小数点位数
- java中控制输出小数位数的方法
- 使用cout输出小数时位数的控制方法
- C++输出控制--小数位数的两种方法
- cout控制输出小数位数
- java 输出指定小数位数double值
- c语言 printf()输出格式控制
- ALV小数位数控制