在 C 中,我有一个浮点变量减少了不正确的数量
In C, I have a floating point variable decreasing by an incorrect amount
我正在用 C 语言编写一个程序来计算应找零钱。您应该输入一个值并返回一条消息,显示如下内容:"Your change is: x quarters, x dimes..."
系统通过 4 个 "for" 循环工作。每个检查变量 x 是否小于用户输入值(金钱)的值。如果是这样,则 x 增加某个硬币值(即 0.25),增加计算特定硬币的变量,并且用户输入的值减少某个硬币值。
问题是用户输入的值(存储在一个名为 money 的浮点数中)减少了不正确的数量。 1 - 0.25 应该是 0.75,对吧?然而,出于某种原因,我的程序将 'money' 的值更改为 0.500000。
代码如下:
float money = 0.00;
int q = 0;
int d = 0;
int n = 0;
int p = 0;
float x = 0.00;
printf("Enter amount: ");
money = GetFloat(); // This function is part of a library called cs50.h
for (x = 0.00; x < money; (x = x + 0.25)) {
q++;
money = (money - 0.25); // This, and everything else like this, is the problem
}
for (x = 0; x < money; (x = x + 0.10)) {
d++;
money = (money - 0.10);
}
for (x = 0; x < money; (x = x + 0.05)) {
n++;
money = (money - 0.05);
}
for (x = 0; x < money; (x = x + 0.01)) {
p++;
money = (money - 0.01);
}
printf("Your change is: %i quarters, %i dimes, %i nickles, and %i pennies.\n", q, d, n, p);
没有真正阅读您的故事,但 0.500 正是您的 for 循环产生的结果
for (x = 0.00; x < money; (x = x + 0.25)) {
q++;
money = (money - 0.25); // This, and everything else like this, is the problem
}
假设钱是 1:
第一次迭代后:x 变为 0.25,money 变为 0.75
然后你有第二次迭代:x 变为 0.5,money 变为 0.5
第二次迭代后,循环结束。因此钱 = 0.5f
并且您的所有循环都存在完全相同的问题。请记住,只有当条件 x < money 不成立时,您的循环才会停止。
你确定你的循环是正确的吗?我认为您可能没有得到您的期望,因为循环的逻辑不正确。例如,如果 money = 1.00 开始,我认为第一个循环将产生以下结果。
x q money x<money
0.00 1 0.75 1
0.25 2 0.50 1
0.50 3 0.25 0 (exit loop)
我正在用 C 语言编写一个程序来计算应找零钱。您应该输入一个值并返回一条消息,显示如下内容:"Your change is: x quarters, x dimes..."
系统通过 4 个 "for" 循环工作。每个检查变量 x 是否小于用户输入值(金钱)的值。如果是这样,则 x 增加某个硬币值(即 0.25),增加计算特定硬币的变量,并且用户输入的值减少某个硬币值。
问题是用户输入的值(存储在一个名为 money 的浮点数中)减少了不正确的数量。 1 - 0.25 应该是 0.75,对吧?然而,出于某种原因,我的程序将 'money' 的值更改为 0.500000。
代码如下:
float money = 0.00;
int q = 0;
int d = 0;
int n = 0;
int p = 0;
float x = 0.00;
printf("Enter amount: ");
money = GetFloat(); // This function is part of a library called cs50.h
for (x = 0.00; x < money; (x = x + 0.25)) {
q++;
money = (money - 0.25); // This, and everything else like this, is the problem
}
for (x = 0; x < money; (x = x + 0.10)) {
d++;
money = (money - 0.10);
}
for (x = 0; x < money; (x = x + 0.05)) {
n++;
money = (money - 0.05);
}
for (x = 0; x < money; (x = x + 0.01)) {
p++;
money = (money - 0.01);
}
printf("Your change is: %i quarters, %i dimes, %i nickles, and %i pennies.\n", q, d, n, p);
没有真正阅读您的故事,但 0.500 正是您的 for 循环产生的结果
for (x = 0.00; x < money; (x = x + 0.25)) {
q++;
money = (money - 0.25); // This, and everything else like this, is the problem
}
假设钱是 1: 第一次迭代后:x 变为 0.25,money 变为 0.75 然后你有第二次迭代:x 变为 0.5,money 变为 0.5 第二次迭代后,循环结束。因此钱 = 0.5f
并且您的所有循环都存在完全相同的问题。请记住,只有当条件 x < money 不成立时,您的循环才会停止。
你确定你的循环是正确的吗?我认为您可能没有得到您的期望,因为循环的逻辑不正确。例如,如果 money = 1.00 开始,我认为第一个循环将产生以下结果。
x q money x<money
0.00 1 0.75 1
0.25 2 0.50 1
0.50 3 0.25 0 (exit loop)