Utilizzando La Matematica::Rotondo

Ho il seguente codice di 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;
}

Ma la sua mi dà problemi di utilizzo per la Matematica::Rotondo, veramente non so come utilizzare questa funzione utilizzando visual c++

InformationsquelleAutor roncansan | 2009-11-16



5 Replies
  1. 7

    Per la matematica::Round() è .NET, non C++.

    Non credo che c’è una diretta pari in C++.

    È possibile scrivere il proprio simile a questo (non testato):

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

    Purtroppo la Matematica::Rotondo è parte del .NET framework e non fa parte del normale C++ spec. Ci sono due possibili soluzioni a questo.

    Il primo è quello di implementare la funzione round di te, utilizzando il soffitto o il pavimento <cmath> e la creazione di una funzione simile al seguente.

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

    Il secondo è quello di abilitare il Common Language Runtime (CLR) per il vostro programma in C++, che consente l’accesso al .NET framework, ma a costo di non avere più un vero programma C++. Se questo è solo un piccolo programma per uso personale, questo probabilmente non è un grosso problema.

    Per attivare il supporto di CLR, effettuare le seguenti operazioni:

    Fare clic destro la tua soluzione e fare clic su proprietà. Quindi fare clic su Proprietà di Configurazione -> Generale -> impostazioni Predefinite del Progetto. In Common Language Runtime support, selezionare l’opzione Supporto di Common Language Runtime (/clr). Quindi fare clic su Applica e su OK.

    Successivamente, aggiungere il codice seguente all’inizio del codice:

    using namespace System;

    Ora si dovrebbe essere in grado di utilizzare la Matematica::Tondo, come con qualsiasi altro .NET lingua.

    • La versione di turno ha due problemi, ci sono i valori, mentre l’aggiunta di .5 non funzionano e il troncamento di int ha problemi di overflow. Mi spiego, sia nel mio risposta. Boost è una valida alternativa per i sistemi più vecchi.
    • Bella cattura con il tipo di problemi. Come per l’algoritmo in sé, che è una grande discussione al di fuori del campo di applicazione di questa domanda. Devo dire che l’algoritmo è molto comune e dovrebbe essere sufficiente per le esigenze espresse qui.
    • Non riesce per alcuni valori tra cui 0.49999999999999994, vedere dal vivo
  3. 4

    Appena imbattuto in questo, ed è ora 2013.

    Questo è supportato in C11, non le versioni precedenti. Quindi sì, approvato risposta è stata adeguata nel ’09.

    Se si utilizza C11 e fare

        include <math.h>

    si dovrebbe essere in grado di chiamare “rotondo”,

    Tale che:

        double a = 1.5;
        round(a);

    Risultato:

        a == 1.0
    • solo commentando che le modifiche erano puramente per la chiarezza e la corretta formattazione.
    • Ancora, questo solo funziona se si sta utilizzando VC12 o superiore compilatore. (Visual Studio 2013 o più recente)
  4. 0

    Si potrebbe migliorare con l’aggiunta di 0.5 e l’utilizzo di piano() come detto in un altro post qui di base per ottenere un arrotondamento.

Lascia un commento