Что ж, я новичок, это мой год по специальности информатика. Я пытаюсь выполнить упражнение из своего учебника, в котором я использую структуру с именем MovieData, в которой есть конструктор, который позволяет мне инициализировать переменные-члены при создании структуры MovieData. Вот как выглядит мой код:
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
// struct called MovieData
struct MovieData
{
string title;
string director;
unsigned year;
unsigned running_time;
double production_cost;
double first_year_revenue;
MovieData() // default constructor
{
title = "Title";
director = "Director";
year = 2009;
running_time = 90;
production_cost = 1000000.00;
first_year_revenue = 1000000.00;
}
// Constructor with arguments:
MovieData(string t, string d, unsigned y, unsigned r, double p, double f)
{
title = t;
director = d;
year = y;
running_time = r;
}
};
// function prototype:
void displayMovieData(MovieData);
// main:
int main()
{
// declare variables:
MovieData movie, terminator("Terminator", "James Cameron", 1984, 120, 5000000, 2000000);
// calling displayMovieData function for movie and terminator
// so it will display information about the movie:
displayMovieData(movie);
displayMovieData(terminator);
return 0;
}
// displayMovieData function:
// It receives struct MovieData variable as
// an argument and displays that argument's
// movie information to the user.
void displayMovieData(MovieData m)
{
cout << m.title << endl;
cout << m.director << endl;
cout << m.year << endl;
cout << m.running_time << endl;
cout << fixed << showpoint << setprecision(2);
cout << m.production_cost << endl;
cout << m.first_year_revenue << endl << endl;
}
вот результат, который я получил:
Title Director 2009 90 1000000.00 1000000.00 Terminator James Cameron 1984 120 -92559631349317830000000000000000000000000000000000000000000000.00 -92559631349317830000000000000000000000000000000000000000000000.00 Press any key to continue . . .
Скомпилировано на Microsoft Visual C ++ 2008 Express Edition.
Мой вопрос: происходит ли это из-за переполнения типа данных double? Я даже пробовал использовать long double, и происходит то же самое. хотя я использовал 5мил как production_cost и 2мил как first_year_revenue, оба числа выводятся одинаково. При правильном использовании конструктора по умолчанию выводится 1000000. Правильный ли тип данных я использую в этом случае? Я хочу, чтобы оно было вдвое больше, потому что это денежное число в долларах и центах.
Спасибо за любую помощь. Извините за мой длинный вопрос. Это мой первый пост на SO, так что любые отзывы о правильном формате размещения вопросов будут отличными, спасибо!