2016-12-15 13 views
-1

Ich muss das Ticket als Zeichenfolge von einer Funktion zurückgeben. Es gibt einige doppelte Variablen und wenn ich es in to_string umwandle, zeigt es 6 Nullen nach dem Dezimalzeichen an. Wie kann ich es so formatieren, dass es nur 2 Nullen nach dem Dezimaltrennzeichen anzeigt, wenn ich den Wert als eine Zeichenkette zurückgebe?C++ Wie konvertiert man ein Double in einen String, so dass nur 2 Nachkommastellen angezeigt werden?

Hier ist mein Code:

#include <iostream> 
#include <fstream> 
#include <iomanip> 
#include <string> 

using namespace std; 

static const int NUM_ROWS = 15; 
static const int NUM_SEATS = 30; 
char SeatStructures[NUM_ROWS][NUM_SEATS]; 
double cost; 
double price[NUM_ROWS]; 
int rowRequested, 
seatNumber; 

string PrintTicket(int row, int seat, double cost); 

int main() 
{ 
    ifstream SeatPrices; 

    SeatPrices.open("SeatPrices.dat"); 
    if (!SeatPrices) 
     cout << "Error opening SeatPrices data file.\n"; 
    else 
    { 
     for (int rows = 0; rows < NUM_ROWS; rows++) 
    { 
     SeatPrices >> price[rows]; 
     cout << fixed << showpoint << setprecision(2); 
    } 
    cout << endl << endl; 
    } 
    SeatPrices.close(); 
    cout << "In which row would you like to find seats(1 - 15)? "; 
    cin >> rowRequested; 
    cout << "What is your desired seat number in the row (1 - 30)? "; 
    cin >> seatNumber; 
    cout << PrintTicket(rowRequested, seatNumber, cost); 
    return 0; 
} 
string PrintTicket(int row, int seat, double cost) 
{ 
    return 
    string("\n****************************************\nTheater Ticket\nRow: ") + 
    to_string(row) + 
    string("\tSeat: ") + 
    to_string(seat) + 
    string("\nPrice: $") + 
    to_string(price[rowRequested - 1]) + 
    string("\n****************************************\n\n"); 
} 


/*Data from text file: 
12.50 
12.50 
12.50 
12.50 
10.00 
10.00 
10.00 
10.00 
8.00 
8.00 
8.00 
8.00 
5.00 
5.00 
5.00*/ 
+5

Numerische Typen wie 'double' nicht Formatierung haben. Sie sind einfach Werte. Wenn Sie einen solchen Wert in eine Textdarstellung umwandeln, beschreibt die Formatierung, wie die Textdarstellung aussehen soll. –

+2

Auch im Umgang mit Geld/Währung sollten Sie zwei ganzzahlige Variablen verwenden. Einer für ganze Dollar und der andere für Cent. Dies gibt Ihnen einen Fixpunkttyp, der geeigneter ist, da Sie keine Bruchteile von einem Cent haben können. – NathanOliver

+0

Ich denke, das Runden auf die Hundertstel Position, aber Sie können den Ort anpassen: http://StackOverflow.com/A/25429632/2642059 –

Antwort

2

Verwenden Sie die gleiche Manipulatoren Sie auf std::cout auf std::ostringstream verwendet:

std::string printTicket(int row, int seat, double cost) 
{ 
    std::ostringstream os; 
    os << "\n****************************************\nTheater Ticket\nRow: "; 
    os << row; 
    os << "\tSeat: "; 
    os << seat; 
    os << "\nPrice: $"; 
    os << std::fixed << std::setprecision(2) << cost; 
    os << "\n****************************************\n\n"; 
    return os.str(); 
} 
+0

Ich habe Stringstream zuvor nicht verwendet, aber das hat funktioniert. Danke für Ihre Hilfe – user131648

Verwandte Themen