Печать с плавающей запятой в виде окупаемости - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть код C, который имитирует бесконтактный контроль.

Enter value of your bill: 50
Insert money for payment: 50 20 5 0.10 0
You have inserted: 75.1
To return: 25.1

Мне нужно добиться этого:

Collect your payback: 20 5 0.10

Я могу использовать только использовать эти номинальные значения:

float allowedMoney[13] = {100, 50, 20, 10, 5, 2, 1, 0.50, 0.20, 0.10, 0.05, 0.02 , 0.01};

Есть идеи, как это сделать?Большое спасибо

main() функция

int main() {
    float bill = getBill();

    float payment = insertPayment();

    if(!payment) return 1;

    printf("You have inserted: %g\n", payment);


    if(payment < bill) {
        printf("Not enough money!\n");
        return 1;
    }

    float toReturn = payment - bill;
    printf("To return: %g\n", toReturn);

    if(toReturn > 0) {
        int payback = getPayback(toReturn);
        print ... (HELP)    
    }
    return 1;
}

РЕДАКТИРОВАТЬ: у меня есть переменная со значением, например: 25,1

Я должен вывести в одну строку это: 205 0,10 То есть «20 долларов + 5 долларов + 10 центов» Я должен перевести число 25,1 в формат долларов и центов, например: 20 5 0,10

20 5 0.10

20 + 5 + 0,10, но без +

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Является ли ваш вопрос «как продолжать запрашивать платеж до тех пор, пока он не станет больше или равен счету?»

Если это так, оберните (приблизительно) приведенный ниже код вуправление циклом (while)

Итак:

float payment = insertPayment();

if(!payment) return 1;

printf("You have inserted: %g\n", payment);


if(payment < bill) {
    printf("Not enough money!\n");
    return 1;
}

становится примерно таким:

while(payment < bill)
{
    printf("Not enough money!\n");
    float payment = insertPayment();

    printf("You have inserted: %g\n", payment);

 }
0 голосов
/ 20 ноября 2018

Как правило, не используйте типы float для представления валюты.Они склонны к ошибкам округления, они не могут точно представлять большие числа, и, вероятно, не стоит усилий, чтобы иметь возможность получить что-то после десятичной запятой.Вместо этого используйте целочисленный тип для представления количества копеек или центов и печатайте значения, используя что-то вроде этого:

printf("$%d.%02d", amount/100, amount%100);

Если вы хотите представлять очень большие числа, вы всегда можете использовать long longint.Простое 32-разрядное целое число может представлять 21 474 836,47 долл., Тогда как IEEE float32 не может представлять 167 772,17 долл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...