我有模拟非接触式结帐的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,但没有+
答案 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);
}