Не удается получить фиксированные двойники setprecision для отображения десятичных знаков

Я здесь новенький, поэтому заранее прошу прощения, если не правильно отформатировал. У меня есть задание на C ++, которое требует от меня взять файл данных, обработать его, а затем вывести файл данных. Я думаю, что я правильно сделал ввод и вывод, но мои расчеты идут с неправильным количеством десятичных разрядов, и один из моих расчетов совершенно неверен. Вот файл inData.txt, который мне дали:

Giselle Robinson Accounting

5600 5 30

450 9

75 1.5

Вот мой исходный код:

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

using namespace std;

int main()
{
string firstName, lastName, department;
double monthlyGrossSalary, bonusPercent, taxPercent, paycheck,
travelDistance, travelTime, averageSpeed;
int coffeeCupsSold; double costOfCupOfCoffee, coffeeSalesAmount;

ifstream inFile;
ofstream outFile;

outFile.open("outData.txt");
inFile.open("inData.txt");
if (!inFile)
{
cout << "Sorry, could not open file!\n";
system("pause");
return 1;
}

cout << fixed << showpoint << setprecision(2);

while (!inFile.eof())
{
//input
inFile >> firstName >> lastName >> department >> monthlyGrossSalary
>> bonusPercent >> taxPercent >> travelDistance >> travelTime
>> coffeeCupsSold >> costOfCupOfCoffee;

//process
paycheck = ((monthlyGrossSalary + (monthlyGrossSalary * (bonusPercent * 0.01))) - (monthlyGrossSalary * (taxPercent * 0.01)));
averageSpeed = (travelDistance / travelTime);
coffeeSalesAmount = (coffeeCupsSold * costOfCupOfCoffee);

//output
outFile << "Name: " << firstName << " " << lastName << "," << " " << "Department: " << department << '\n'
<< "Monthly Gross Salary: " << "$" << monthlyGrossSalary << ", " << "Monthly Bonus: " << bonusPercent << "%, " << "Taxes: " << taxPercent << "%" << '\n'
<< "Paycheck: " << "$" << paycheck << '\n' << '\n'
<< "Distance Traveled: " << travelDistance << " miles, " << "Traveling Time: " << travelTime << " hours" << '\n'
<< "Average Speed: " << averageSpeed << " miles per hour" << '\n' << '\n'
<< "Number of Coffee Cups Sold: " << coffeeCupsSold << ", " << "Cost: " << "$" << costOfCupOfCoffee << " per cup" << '\n'
<< "Sales Amount = " << "$" << coffeeSalesAmount << endl;
}

inFile.close();
outFile.close();

system("pause");
return 0;
}

Вот что я получаю в файле outData.txt:

Name: Giselle Robinson, Department: Accounting
Monthly Gross Salary: $5600, Monthly Bonus: 5%, Taxes: 30%
Paycheck: $4200

Distance Traveled: 450 miles, Traveling Time: 9 hours
Average Speed: 50 miles per hour

Number of Coffee Cups Sold: 75, Cost: $1.5 per cup
Sales Amount = $112.5

И вот чего я пытаюсь добиться:

Name: Giselle Robinson, Department: Accounting
Monthly Gross Salary: $5600.00, Monthly Bonus: 5.00%, Taxes: 30.00%
Paycheck: $4116.00

Distance Traveled: 450.00 miles, Traveling Time: 9.00 hours
Average Speed: 50.00 miles per hour

Number of Coffee Cups Sold: 75, Cost: $1.50 per cup
Sales Amount = $112.50

Итак, мои проблемы: 1) получить все числа (кроме поля «Количество проданных кофейных чашек»), чтобы показать два десятичных знака, и 2) получить 4116,00 долл. США вместо 4200 долл. США для поля «зарплата». Я думаю, что это, вероятно, как-то связано с << фиксированный << showpoint << setprecision (2); «line, а также что-то не так с моими переменными. Мы сделали пример присваивания в классе, который был очень похож на этот, и я сделал все то же самое, что мы сделали в этом присваивании, поэтому здесь я Я надеюсь, что это легко исправить, и я очень признателен за любые отзывы, даже если это не прямое решение. Заранее спасибо: D

3

Решение

Попробуйте позвонить setprecision в потоке выходного файла outFile непосредственно:

outFile << fixed << showpoint << setprecision(2)<< monthlyGrossSalary

1

Другие решения

Получаемое вами значение зарплаты является правильным для формулы, которую вы написали. Я предполагаю, что формула, которую вы хотели написать, это

paycheck = monthlyGrossSalary - monthlyGrossSalary * (taxPercent * 0.01);
paycheck = paycheck + paycheck * (bonusPercent * 0.01);

т.е. налог вычитается до применения бонуса, а не в то время, когда вы его написали.

Эта формула дает ожидаемое вами значение 4116.

Обе ошибки являются хорошим примером того, что программы делают именно то, что вы им сказали, а не то, что, как вы думали, вы сказали им делать.

0

По вопросам рекламы [email protected]