仅使用javascript条件语句返回更改

时间:2018-12-22 00:44:12

标签: javascript conditional

试图编写一个程序以返回硬币的确切零钱 使用的硬币是[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);

2 个答案:

答案 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等。