使用Math :: Round

时间:2009-11-16 20:14:39

标签: c++ visual-c++ visual-studio-2008 rounding

我有以下visual c ++代码

#include <iostream>
#include <string>
#include <sstream>
#include <math.h>

using namespace std;

int Main()
{
    double investment = 0.0;
    double newAmount = 0.0;
    double interest = 0.0;
    double totalSavings = 0.0;
    int month = 1;
    double interestRate = 0.065;

    cout << "Month\tInvestment\tNew Amount\tInterest\tTotal Savings";
    while (month < 10)
    {
            investment = investment + 50.0;
        if ((month % 3 == 0))
        {
          interest = Math::Round((investment * Math::Round(interestRate/4, 2)), 2);
        }
        else
        {
          interest = 0;
        }
        newAmount = investment + interest;
        totalSavings = newAmount;
        cout << month << "\t" << investment << "\t\t" << newAmount << "\t\t" << interest << "\t\t" << totalSavings;
        month++;
    }
  string mystr = 0;
  getline (cin,mystr);
  return 0;
}

但它给我使用Math :: Round的问题,真的我不知道如何使用visual c ++来使用这个函数

5 个答案:

答案 0 :(得分:7)

Math :: Round()是.NET,而不是C ++。

我不相信C ++中有直接的平等。

你可以这样编写自己的(未经测试):

double round(double value, int digits)
{
  return floor(value * pow(10, digits) + 0.5) / pow(10, digits);
}

答案 1 :(得分:6)

不幸的是,Math :: Round是.NET框架的一部分,并不是普通C ++规范的一部分。有两种可能的解决方案。

第一种是自己实现圆形功能,使用来自&lt; cmath&gt;的ceil或floor。并创建类似于以下的功能。

#include <cmath>
inline double round(double x) { return (floor(x + 0.5)); }

第二个是为您的C ++程序启用公共语言运行时(CLR)支持,这将允许访问.NET框架,但代价是它不再是真正的C ++程序。如果这只是一个供您自己使用的小程序,这可能不是什么大问题。

要启用CLR支持,请执行以下操作:

右键单击您的解决方案,然后单击属性。然后单击配置属性 - &gt;一般 - &gt;项目默认值。在Common Language Runtime支持下,选择Common Language Runtime Support选项(/ clr)。然后单击“应用”和“确定”。

接下来,将以下内容添加到代码顶部:

using namespace System;

现在,您应该可以像使用任何其他.NET语言一样使用Math :: Round。

答案 2 :(得分:4)

刚刚遇到这个问题,现在是2013年。

这在C11中受支持,而不是旧版本。所以,是的,批准的答案在09年是合适的。

如果您使用的是C11,那么

    include <math.h>

你应该可以打电话给#34; round&#34;,

这样:

    double a = 1.5;
    round(a);

导致:

    a == 1.0

答案 3 :(得分:0)

AFAICT cmath(math.h)不定义Round函数,也不定义Math名称空间。见http://msdn.microsoft.com/en-us/library/7wsh95e5%28VS.80,loband%29.aspx

答案 4 :(得分:0)

你可能最好添加0.5并使用另一篇文章中提到的floor()来获得基本的舍入。