由于整数值的除法而得到两倍

时间:2017-04-25 03:22:33

标签: c++

如果一个人收入低(<= 25,000)且咨询时间小于或等于30分钟,则不收费;否则,服务费是30分钟内正常小时费率的40%。

对于其他人,如果咨询时间小于或等于20分钟,则不收取服务费;否则,服务费是20分钟内正常小时费率的70%。

(例如,假设一个人收入低,花费1小时15分钟,每小时费用为70.00美元。然后结算金额为70.00 * 0.40 *(45/60)= $ 21.00。)

用C ++编写程序,提示用户输入每小时费率,总咨询时间以及该人是否收入低。该程序应输出结算金额。

这是我到目前为止所做的,程序看起来对我来说正确,但由于某种原因我得不到正确的输出。我得到0.00,这是一个错误的输出值。

#include<iostream>
#include <iomanip>
using namespace std;

double calculateBill(int income, int consultingMinutes, double hourlyRate);

int main()
{
    int income; 
    double consultingMinutes;
    double hourlyRate;

    cout << "Please enter the clients income: $" ;
    cin >> income; 

    cout << "Please enter the consulting time in minutes: ";
    cin >> consultingMinutes;

    cout << "Please enter the hourly rate: $";
    cin >> hourlyRate; cout << fixed << showpoint << setprecision(2);

    cout << "Your total bill ammount comes to: $" << calculateBill(income, consultingMinutes, hourlyRate) << endl;

    return 0;
}

double calculateBill(int income, int consultingMinutes, double hourlyRate)
{
    if (income <= 25000) { 
        if (consultingMinutes <= 30) 
            return 0; 
    else 
        return hourlyRate * 0.40 * ((consultingMinutes - 30) / 60);
    }
    else { 
        if (consultingMinutes <= 20) 
            return 0;
        else 
            return hourlyRate * 0.70 * ((consultingMinutes - 20) / 60);
    }
}

1 个答案:

答案 0 :(得分:0)

整数和浮点数的混合不是一件好事。试试这个:

return hourlyRate * 0.40 * (((double) consultingMinutes - 30.0) / 60.0);

而不是:

return hourlyRate * 0.40 * ((consultingMinutes - 30) / 60);

(对第二个错误的地方应用相同的修复return hourlyRate * 0.70 * ((consultingMinutes - 20) / 60);