不得不说C++小数点管理很鸡肋,无法按位精确控制四舍五入的函数可用与计算,且末尾小数若是5的话会变为498。

long double 舍入(long double 数, int 位)
{
	long long z = (long long)数, xz = 0;
	long double m = 10, x = (数 - z) * 10;
	while (--位)x *= 10, m *= 10;
	xz = (long long)(x * 10);
	if (xz % 10 >= 5)
		xz /= 10, xz++;
	else
		xz /= 10;
	x = 0;
	while (m)x += (xz % 10) / m, m /= 10, xz /= 10;
	return (z + x);
}
long double 舍入(long double 数, int 位)
{
	long long z = (long long)数, xz = 0;
	long double m = 10, x = (数 - z) * 10;
	while (--位)x *= 10, m *= 10;
	xz = (long long)(x * 10);
	if (xz % 10 >= 5)
		xz /= 10, xz++;
	else
		xz /= 10;
	return (z + xz / m);
}



	std::cout << std::setprecision(34) << 舍入(平方开方(2, 2), 14) << "\t";

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐