从而创建舍入函数

creating a rounding function

本文关键字:函数 舍入 创建      更新时间:2023-10-16

试图做一些真正简单的事情,但这让我头疼不已。

我需要写一个函数,将双参数的值四舍五入到n指定的小数位数。

我已经记下了大部分,但由于某种原因,结果=。。。。。只计算舍入算法的第一行(见下文)

结果不是四舍五入,而是简单地将小数点移动到n指定的位数。我的代码如下:

#include <iostream>
#include <cmath>
using namespace std;
double round(double x, int n)
{
double result;
result = 
x * pow(10, n);
x = x + 0.5;
x = floor(x);
x = x / pow(10, n);
 return result;
}
int main()
{
cout << round(-2.9, 0) << endl;
cout << round(-2.59, 1) << endl;
cout << round(.0059, 2) << endl;
cout << round(1.23467, 3) << endl;
cout << round(9.999999, 4) << endl;
return 0;
}

您的round()返回result = x * pow(10, n),那么您还期望什么呢?

使用类似的东西可能会得到更好的结果

double round(double x, int n) {
    x = x * pow(10, n);
    x = x + 0.5;
    x = floor(x) / pow(10, n);
    return x;
}

问题是,在原始代码中,您分配了result = x * pow(10, n);,但随后使用x而不是result继续执行其余所有操作。

您还可以组合一些语句来减少方法中的行数,甚至可以选择像return floor(x * pow(10, n) + 0.5) / pow(10, n);这样的单行。这并不一定更好,但当你所做的只是数学时,你不需要在自己的行上执行每个运算。