将浮动打印为C中的现金回报

时间:2018-11-20 18:42:49

标签: c function integer currency

我有模拟非接触式结帐的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

我必须在一行中输出:20 5 0.10 多数民众赞成在“ 20美元+ 5美元+ 10美分” 我必须将数字25.1转换为美元和美分的格式,例如:20 5 0.10

20 5 0.10

20 + 5 + 0.10,但没有+

2 个答案:

答案 0 :(得分:2)

通常,请勿使用float类型来表示货币。它们很容易出现舍入错误,它们不能精确地表示较大的数字,仅能够在小数点后得到一些值可能不值得。取而代之的是,使用整数类型来表示便士或美分的数量,并使用如下所示的值来打印值:

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

如果要表示非常大的数字,可以始终使用long long代替int。一个普通的32位整数可以表示$ 21,474,836.47,而IEEE float32不能表示$ 167,772.17。

答案 1 :(得分:0)

您的问题是“如何继续提示您付款,直到它大于或等于帐单?”

如果是这样,将以下代码包装(大约)在一个循环(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);

 }