Использование Math :: Round - PullRequest
       28

Использование Math :: Round

1 голос
/ 16 ноября 2009

У меня есть следующий визуальный код 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 ]

7 голосов
/ 16 ноября 2009

Math :: Round () - это .NET, а не C ++.

Я не верю, что в C ++ есть прямое равенство.

Вы можете написать свое собственное, как это (не проверено):

double round(double value, int digits)
{
  return floor(value * pow(10, digits) + 0.5) / pow(10, digits);
}
6 голосов
/ 16 ноября 2009

К сожалению, Math :: Round является частью .NET Framework и не является частью обычной спецификации C ++. Есть два возможных решения этого.

Первый - реализовать функцию round самостоятельно, используя ceil или floor из и создав функцию, подобную следующей.

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

Второй - включить поддержку Common Language Runtime (CLR) для вашей программы на C ++, что позволит получить доступ к .NET framework, но за счет того, что она больше не является настоящей программой C ++. Если это небольшая программа для вашего собственного использования, это, вероятно, не имеет большого значения.

Чтобы включить поддержку CLR, выполните следующие действия:

Щелкните правой кнопкой мыши свое решение и выберите свойства. Затем нажмите Свойства конфигурации -> Общие -> Проект по умолчанию. В разделе Поддержка общеязыковой среды выполнения выберите параметр Поддержка общеязыковой среды выполнения (/ clr). Затем нажмите Применить и ОК.

Далее добавьте следующее в начало вашего кода:

using namespace System;

Теперь вы сможете использовать Math :: Round, как и с любым другим языком .NET.

4 голосов
/ 02 апреля 2014

Просто столкнулся с этим, и сейчас 2013 год.

Это поддерживается в C11, а не в более старых версиях. Так что да, утвержденный ответ был уместен в '09.

Если вы используете C11, и вы делаете

    include <math.h>

Вы должны быть в состоянии назвать "круглый",

такой, что:

    double a = 1.5;
    round(a);

В результате:

    a == 1.0
0 голосов
/ 16 ноября 2009

Возможно, вам лучше добавить 0.5 и использовать floor (), как указано в другом посте, чтобы получить базовое округление.

0 голосов
/ 16 ноября 2009

AFAICT cmath (math.h) не определяет ни функцию Round, ни пространство имен Math. см http://msdn.microsoft.com/en-us/library/7wsh95e5%28VS.80,loband%29.aspx

...