为什么此代码忽略数组中的0.10和0.01值。 [英] Why this code ignore 0.10 and 0.01 value in the array.
问题描述
这是我的自助结账工作的核心,我想知道为什么它不能正常工作。它忽略了0.10和0.01的值,我不知道为什么。请帮我。
int main()
{
float howMuch;
浮动付款;
浮动货币[13] = {100,50,20,10,5,2,1,0.50,0.20,0.10,0.05,0.02,0.01};
scanf(%f,& howMuch);
while(howMuch> 0)
{
scanf(%f,& payment);
howMuch - =付款;
}
howMuch = -1 * howMuch;
for(int i = 0; i< 13; i ++)
{
while(money [i]< = howMuch)
{
howMuch - =钱[I];
printf(%。2f,money [i]);
}
}
printf(\ n);
返回0;
}
我的尝试:
没什么,我认为它应该可行。
这是一个舍入问题(参见每个计算机科学家应该知道关于浮点运算的知识 [ ^ ])。尝试运行
#include < stdio.h >
int main()
{
float howMuch;
浮动付款;
float money [ 13 ] = { 100 , 50 , 20 , 10 , 5 , 2 , 1 , 0 。 50 , 0 。< span class =code-digit> 20 , 0 。 10 , 0 。 05 , 0 。 02 , 0 。 01 };
scanf( %f,& howMuch);
while (howMuch> 0 )
{
scanf( %f,& payment);
howMuch - =付款;
}
howMuch = - 1 * howMuch;
printf( howMuch =%f\ n,howMuch) ;
for ( int i = 0 ; i< 13 ; i ++)
{
while (money [i]< = howMuch)
{
howMuch - = money [i];
printf( money%.2f(howMuch%f)\ n,钱[i],怎么样);
}
}
printf( \ n) ;
return 0 ;
}
howMuch = .9
和pay = 100
它输出:
howMuch = 99.099998
money 50.00(howMuch 49.099998)
money 20.00(howMuch 29.099998)
money 20.00(howMuch 9.099998)
钱5.00(howMuch 4.099998)
钱2.00(howMuch 2.099998)
钱2.00(howMuch 0.099998)
钱0.05(howMuch 0.049998)
钱0.02(howMuch 0.029998)
money 0.02(howMuch 0.009998)
我建议您使用int
s (分
粒度,例如150
意味着1.50
)而不是float
s。
Quote:为什么这段代码会忽略数组中的0.10和0.01值。
因为你使用浮点数!
浮点数不是确切的值。
如果你说你以美分工作,你可以切换到整数。
某些语言有货币
datatyp e with是缩放整数。
例如,如果howMuch为0.90且pay为100,则返回50 20 20 5 2 2 0.05 0.02 0.02 ... not 50 20 20 5 2 2 0.10
This is the core from my self-checkout assignment and I am wondering why it is not working properly. It is ignoring 0.10 and 0.01 value, and I do not know why. Please help me.
int main() { float howMuch; float payment; float money[13] = {100, 50, 20, 10, 5, 2, 1, 0.50, 0.20, 0.10, 0.05, 0.02, 0.01}; scanf("%f", &howMuch); while(howMuch > 0 ) { scanf("%f", &payment); howMuch -= payment; } howMuch = -1*howMuch; for(int i = 0; i < 13; i++) { while(money[i] <= howMuch) { howMuch -= money[i]; printf("%.2f ", money[i]); } } printf("\n"); return 0; }
What I have tried:
Nothing, I just think it should work.
It is a rounding problem (see What Every Computer Scientist Should Know About Floating-Point Arithmetic[^]). Try to run
#include <stdio.h> int main() { float howMuch; float payment; float money[13] = {100, 50, 20, 10, 5, 2, 1, 0.50, 0.20, 0.10, 0.05, 0.02, 0.01}; scanf("%f", &howMuch); while(howMuch > 0 ) { scanf("%f", &payment); howMuch -= payment; } howMuch = -1*howMuch; printf("howMuch = %f\n", howMuch); for(int i = 0; i < 13; i++) { while(money[i] <= howMuch) { howMuch -= money[i]; printf("money %.2f (howMuch %f)\n", money[i], howMuch); } } printf("\n"); return 0; }
WithhowMuch = .9
andpayment = 100
It outputs:
howMuch = 99.099998 money 50.00 (howMuch 49.099998) money 20.00 (howMuch 29.099998) money 20.00 (howMuch 9.099998) money 5.00 (howMuch 4.099998) money 2.00 (howMuch 2.099998) money 2.00 (howMuch 0.099998) money 0.05 (howMuch 0.049998) money 0.02 (howMuch 0.029998) money 0.02 (howMuch 0.009998)
I suggest you to useint
s (withcent
granularity, e.g.150
would mean1.50
) instead offloat
s.
Quote:Why this code ignore 0.10 and 0.01 value in the array.
Because you are using floats!
Floats are not exact values.
If you say that you work in cents, you can switch to integers.
Some languages havecurrency
datatype with is scaled integer.
for example if howMuch is 0.90 and payment is 100, It returns 50 20 20 5 2 2 0.05 0.02 0.02 ... not 50 20 20 5 2 2 0.10
这篇关于为什么此代码忽略数组中的0.10和0.01值。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!