C++浮点数保留n位小数(保留n位精度)

文章介绍了C++中的TruncRealNum模板函数,用于根据给定的小数位数对实数(float和double类型)进行截断并提供示例,展示了如何在main函数中使用该函数处理浮点数的精度问题。
摘要由CSDN通过智能技术生成

例:TruncRealNum()模板函数 对实数进行截断保留n位小数
输入: double d = 3.14159265358979;
float f = 3.141592635
输出: d = TruncRealNum(d,5);
d = 3.14159
f = TruncRealNum(f,4);
f = 3.1416

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

template <typename RealType>			//模板支持float,double
RealType TruncRealNum(RealType num, int precision)
{
	if (precision < 0)
	{
		return num;
	}

	if (0 == precision)
	{
		return round(num);
	}

	int anum = static_cast<int>((num + 0.5 * pow(0.1, precision)) * pow(10, precision));			//被舍去的一位四舍五入进位
	std::cout<<std::setprecision(precision +  1);       //调整输出流的显示精度
	return static_cast<RealType>(anum / pow(10, precision));
}

例子: main函数

int main(){

	
    float f = 3141592654;
	double d = 3.456343424523547867;

	std::cout<<std::setprecision(16)<<endl;
	cout<<f<<" "<<d<<endl;
	cout << TruncRealNum(f, 0) << endl;
	cout << TruncRealNum(f, 1) << endl;
	cout << TruncRealNum(f, 4) << endl;
	cout<<"---------------------------"<<endl;
	cout<<TruncRealNum(d,0)<<endl;
	double d4 = TruncRealNum(d,4);
	cout<<d4<<endl;
	double d8 = TruncRealNum(d,15);
	cout<<d8<<endl;

    return 0;
}
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值