获得错误的总成本值

问题描述 投票:0回答:1

给出某餐的餐价(餐的基本成本),小费百分比(餐费的百分比)和税率(餐费的百分比)。打印餐点的总费用。

这是我的代码:

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);,我四舍五入了值,但仍然没有变化。

c++ casting double
1个回答
0
投票

我假设您的公式与您所在国家/地区的惯例相对应(此处的小费和税费是单独计算的,因此,小费不收税,并且小费也不是根据已餐餐费计算的)

问题是您的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) ;

不相关:最后,这只是一个练习,但是我还是建议您考虑考虑从函数中返回值并在其他位置打印该值。这将遵循一个功能应该做一件事情并且做好事的原则。

© www.soinside.com 2019 - 2024. All rights reserved.