Не считая всех монет

0

Я пытаюсь создать простую программу сортировки изменений, все нормально функционирует для части, которая предполагает обнаружение кварталов.

Пример токового выхода:

The amount you entered is: 52.50

You have this many Fifty dollars: 1 

You have this many Ten dollars: 0

You have this many One: 2

You have this many Quarters: 0

Желаемый результат:

The amount you entered is: 52.50

You have this many Fifty dollars: 1 

You have this many Ten dollars: 0

You have this many One: 2

You have this many Quarters: 2

Код:

#include <iostream>

using namespace std;

const int FIFTY = 50;
const int TEN = 10;
const int ONE = 1;
const double QUARTER = 0.25;

int _tmain(int argc, _TCHAR* argv[])
{
    int change;

    cout << "Enter the amount of money in your wallet: ";
    cin >> change;
    cout << endl;


    cout << "The amount you entered is: " << change << endl;
    cout << "The number of Fifty dollars to be returned is: " << change / FIFTY << endl;
    change = change % FIFTY;

    //
    cout << "The number of Ten dollars to be returned is: " << change / TEN << endl;
    change = change % TEN;

    //
    cout << "The number of One dollars to be returned is: " << change / ONE << endl;
    change = change % ONE;

    //
    cout << "The number of Quarters to be returned is: " << change / QUARTER << endl;
    change = change % QUARTER;

    return 0;
}

2 ошибки, которые я получаю:

Error   1   error C2297: '%' : illegal, right operand has type 'double' 

Error2  IntelliSense: expression must have integral or unscoped enum type   
  • 0
    Я предлагаю вам использовать центы в качестве своих единиц, а не долларов. Таким образом, вам не придется иметь дело с нецелыми типами.
  • 0
    Если вы конвертируете все в центы, вы можете избежать этой проблемы.
Показать ещё 3 комментария
Теги:
modulo
double

1 ответ

0

Ваша переменная change - тип int, поэтому она не будет хранить 52.50 вообще.

Он прочитает 52 затем остановится.

Кроме того, вы не можете использовать значения с плавающей запятой в операторе %.

Я бы предложил прочитать значение в виде двойника, умножив его на сотню, возможно, добавив небольшую дельту (например, 0.001), чтобы избежать потенциальных проблем с плавающей точкой, а затем поместив ее в int. Другими словами, сделайте это целое число центов.

Затем используйте int для выполнения вычислений.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню