试图编写一个程序以返回硬币的确切零钱 使用的硬币是[1、0.50、0.20、0.10、0.05、0.02、0.01]。 我试图只使用条件语句来做到这一点。 我的问题是最后一个“ IF”语句无法按我希望的那样工作,而且我没有弄错。
例如,对于当前数字,结果应为[1 x 0.20和2 x 0.02]。 代替它返回了我[1 x 0,20和1 x 0.02和1 x 0.01]
var price = 0.76;
var paid = 1;
var a = paid - price;
var oneLeva = 0;
var fiftyCents = 0;
var twentyCents = 0;
var tenCents = 0;
var fiveCents = 0;
var twoCents = 0;
var oneCents = 0;
if((a - 1) >= 0){
oneLeva += 1;
a -= 1;
if((a - 1) >= 0){
oneLeva += 1;
a -= 1;
if((a - 1) >= 0){
oneLeva += 1;
a -= 1;
if((a - 1) >= 0){
oneLeva += 1;
a -= 1;
}
}
}
}
if((a - 0.50) >= 0){
fiftyCents += 1;
a -= 0.50;
}
if((a - 0.20) >= 0){
twentyCents += 1;
a -= 0.20;
if((a - 0.20) >= 0){
twentyCents += 1;
a -= 0.20;
}
}
if((a - 0.10) >= 0){
tenCents += 1;
a -= 0.10;
}
if((a - 0.05) >= 0){
fiveCents += 1;
a -= 0.05;
}
if((a - 0.02) >= 0){
twoCents += 1;
a -= 0.02;
if((a - 0.02) >= 0){
twoCents += 1;
a -= 0.02;
}
}
if((a - 0.01) > 0){
oneCents += 1;
a -= 0.01;
}
console.log(oneLeva);
console.log(fiftyCents);
console.log(twentyCents);
console.log(tenCents);
console.log(fiveCents);
console.log(twoCents);
console.log(oneCents);
答案 0 :(得分:2)
欢迎使用JavaScript进行数学运算!
好吧,所以发生的事情是,当您执行0.24 - 0.2
时,结果不是0.04
。而是0.03999999999999998
。然后,从得到0.02
的值中减去0.01999999999999998
,该值小于2
,因此if
语句陷入混乱,您的代码给出了意外的结果。
这是因为JavaScript不像大多数人期望的那样存储浮点数,这意味着它会失去精度。
您可以通过在代码的每个步骤中执行console.log(a)
来看到这一点。
我强烈建议您看看this SO post,它完全涵盖了您遇到的问题。有多种解决方案将为您服务。
w3schools has some good examples。
玩得开心!
答案 1 :(得分:0)
JS与许多其他编程语言一样,对浮点数的处理也不佳。解决方法非常简单:只需将所有数字乘以100或1000等即可,直到没有浮点为止,然后进行计算,然后将结果除以100或1000等。