四舍五入

本文介绍了一种用于规范化浮点数的算法实现,通过该算法可以有效地对浮点数进行四舍五入处理,并保留指定的小数位数。具体方法是先将数值放大到整数范围,再进行取整操作,最后缩小回原始比例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

const double ExtDecimalArray[9]={ 1.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, 10000000.0, 100000000.0 };

double NormalizeDouble(const double val,int digits) {
	if(digits<0) digits=0;
	if(digits>8) digits=8;
	//----
	const double p=ExtDecimalArray[digits];
	return((val>=0.0) ? (double(__int64(val*p+0.5000001))/p) : (double(__int64(val*p-0.5000001))/p));
}

五舍六入,digits为精确到小数点后第几位。

const double ExtDecimalArray[9]={ 1.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, 10000000.0, 100000000.0 };

double NormalizeDouble(const double val,int digits) {
	if(digits<0) digits=0;
	if(digits>8) digits=8;
	//----
	const double p=ExtDecimalArray[digits];
	return((val>=0.0) ? (double(__int64(val*p+0.4000001))/p) : (double(__int64(val*p-0.4000001))/p));
}

思路是,要保留n位,就先将值乘以10的n次方,加上0.5后取整,再除以10的n次方。

例如,1.23456要保留两位小数,乘以10的2次方后变成123.456,加上0.5后变成123.956,取整后变成123,然后除以100变成1.23

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值