给出某餐的餐价(餐的基本成本),小费百分比(餐费的百分比)和税率(餐费的百分比)。打印餐点的总费用。
这是我的代码:
void solve(double meal_cost, double tip_percent, double tax_percent) {
double total;
tip_percent=meal_cost*((tip_percent)/100.0);
tax_percent=((tax_percent)/100.0)*meal_cost;
total=(meal_cost)+(tip_percent)+(tax_percent);
int t1=(double)total ;
cout<<t1;
}
这分别是针对这些测试用例值的失败:
10.25175
预期输出:
13
代码已经通过了3个测试用例,但是在具有上述值的最后一个测试用例中失败了(因此,我怀疑技巧的计算是否正确)。
我认为这是一个四舍五入的问题。我该如何处理?
无变化反映:cout<<round(t1);
,我四舍五入了值,但仍然没有变化。
我假设您的公式与您所在国家/地区的惯例相对应(此处的小费和税费是单独计算的,因此,小费不收税,并且小费也不是根据已餐餐费计算的)
问题是您的total
被定义为int
。所以它被截断了。而且您对第一个测试用例很幸运;-)
这应该已经可以改善情况:
double t1=total ;
但是,这将导致三位数的值12.505
。使用<iomanip>
,您可以设置更好的格式:
cout<<fixed<<setprecision(2)<<t1; // 12.50
如果您不想输入两位数,则可以让格式化完成这项工作:
cout<<fixed<<setprecision(2)<<t1; // 13
但是使用某些rounding函数将<cmath>
控制在计算级别上可能是一个更好的主意:
double t1=round(total) ;
不相关:最后,这只是一个练习,但是我还是建议您考虑考虑从函数中返回值并在其他位置打印该值。这将遵循一个功能应该做一件事情并且做好事的原则。