2021-11-08 C++舍入
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++;els
·
不得不说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";
更多推荐


所有评论(0)