【问题标题】:creating a rounding function创建舍入函数
【发布时间】:2013-02-12 01:01:39
【问题描述】:

尝试做一些真正简单的事情,但它让我非常头疼。

我需要编写一个函数,将 double 参数的值四舍五入到 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;

}

【问题讨论】:

    标签: c++ function rounding


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可能会通过以下方式获得更好的结果:

      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); 这样的单行语句。并不是说这一定会更好,但是当您所做的只是数学时,您不需要在自己的行上执行每个操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-19
        • 2021-07-27
        • 2014-06-10
        • 1970-01-01
        • 2022-11-17
        相关资源
        最近更新 更多