【问题标题】:Print float as money payback in C在 C 中打印浮动作为金钱回报
【发布时间】:2019-04-23 06:44:33
【问题描述】:

我有模拟非接触式结账的 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 但没有 +

【问题讨论】:

  • 您的问题是什么?你如何打印payback
  • 使用整数而不是浮点数。如果x 是整数美分的金额,您可以使用例如打印它printf("%d.%02d\n", x / 100, x % 100);.
  • 是的,我觉得每个金钱问题的答案都是“不要使用浮点数”。
  • 50% 的堆栈交换问题是(1)不要使用浮点数来赚钱,(2)只给 RNG 做一次种子,(3)不要使用 scanf() 做任何事情。

标签: c function integer currency


【解决方案1】:

一般情况下,不要使用float 类型来表示货币。它们容易出现舍入错误,它们不能准确地表示大数字,而且仅仅为了能够得到小数点后的东西可能不值得付出努力。相反,使用整数类型来表示便士或美分的数量,并使用以下方式打印值:

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

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

【讨论】:

【解决方案2】:

你的问题是,“我如何一直提示付款直到它大于或等于账单?”

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

 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-31
    • 2013-05-12
    • 2012-12-27
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    相关资源
    最近更新 更多