无法获得固定的设置精度双精度以显示小数位



我是全新的,所以如果我的格式不正确,我提前道歉。我有一个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 美元的"薪水"字段。我认为这可能与"cout <<固定<<显示点<<setprecision(2);"行有关,也与 my 变量有问题有关。我们在课堂上做了一个与这个非常相似的示例作业,我做的所有事情都和我们在那个作业中做的方式一样,所以我在这里。我希望这是一个简单的解决方案,即使它不是直接的解决方案,我也非常感谢任何反馈。提前致谢:D

尝试直接在输出文件流outFile上调用setprecision

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

您获得的薪水值对于您编写的公式是正确的。我猜你想写的公式是这个

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

即在应用奖金之前扣除税款,而不是与您写的奖金同时扣除。

此公式给出您期望的值 4116。

这两个错误都是一个很好的例子,说明程序完全按照你告诉它们做的事情去做,而不是你认为你告诉它们做的事情。

最新更新