【发布时间】:2018-11-01 19:23:09
【问题描述】:
我正在尝试创建代码来计算为用户提供正确找零所需的最小硬币数量。
我写的代码几乎是正确的,但硬币的数量总是有一点偏差。我假设这是由于小数位数增加的数字不精确。
有没有办法将浮点数限制为小数点后 2 位?
例如: 如果我输入 5,它将产生 19 * 25 美分、2 * 10 美分、0 * 5 美分和 4 * 1 美分。
但正确的数量应该分别是 20 - 0 - 0 - 0。
#include <stdio.h>
#include <cs50.h>
//Assume that the only coins available are quarters (25¢), dimes (10¢), nickels (5¢), and pennies (1¢)
int main(){
float change;
float newTotal;
int coin25 = 0;
int coin10 = 0;
int coin5 = 0;
int coin1 = 0;
do{
change = get_float("How much change is owed: $ ");
}
while (change <= 0);
for (float i = 0.25; i < change; i += 0.25){
coin25 += 1;
}
newTotal = change - (coin25 * 0.25);
for (float j = 0.1; j < newTotal; j += 0.1){
coin10 += 1;
}
newTotal = newTotal - (coin10 * 0.1);
for (float k = 0.05; k < newTotal; k += 0.05){
coin5 += 1;
}
newTotal = newTotal - (coin5 * 0.05);
for (float l = 0.01; l < newTotal; l += 0.01){
coin1 += 1;
}
newTotal = newTotal - (coin1 * 0.01);
//int coins = coin25 + coin10 + coin5 + coin1;
//printf("%i\n", coins);
printf("%i\n", coin25);
printf("%i\n", coin10);
printf("%i\n", coin5);
printf("%i\n", coin1);
}
【问题讨论】:
-
@user3121023 我会,但我的问题表要求我使用浮点数
-
不是所有季度5美元的最低硬币数量吗?所以20-0-0-0?我不认为我理解这里的问题
-
@Bwebb 你是对的,应该是 20-0-0-0。我的错。
-
@KernelPource 是的,for 循环使用 应该没问题
-
@Bwebb 这是有道理的。谢谢!