变量不会是Math.floor();

时间:2017-03-20 18:40:39

标签: javascript html floor

我希望变量每秒更新为Math.floor(jeans + jps)的值,其中jeans是牛仔裤的数量,jps是每秒生产的牛仔裤数量。

以下是我的脚本中的代码段:

setInterval(function() { 
    var prefloor = (jeans + jps);
    jeans = Math.floor(prefloor);
}, 1000);

但是,这不会改变jeans的值。但以下确实改变了它:

setInterval(function() { 
    var prefloor = (jeans + jps);
    jeans = prefloor;
}, 1000);

我做错了什么?

2 个答案:

答案 0 :(得分:1)

问题是你的delta值(jps)如果是< = 1则会被归为0。因此,牛仔裤的值会改变0,因此保持不变。

这是一个JSFiddle,当jsp> = 1时,牛仔裤的价值会发生变化:

JSFiddle

它适用于此值,但十进制值将向下舍入,从而导致一些不一致。

修复

要获得您可能正在寻找的行为,您要做的就是制作一个精确的变量(不是四舍五入),然后在显示时将该值置于最低值。

例如:

var jeans=0;
var jps=0;

element.onclick=function(){jps+=0.2}

setInterval(function(){
  jeans+=jps;
  document.getElementById("jcount").innerHTML=Math.floor(jeans);  //use Math.floor only for display
},1000)

Updated JSFiddle

答案 1 :(得分:0)

你的裁缝变量在第15行设置为0.在第19行,你写

jps = (tailors*0.2);

等于jps =(0 * 0.2)并且获得裁缝++的唯一方法是购买东西,然而需要至少20,这将永远不会发生。设置尾标= 1,您的计数将开始。

(它还不是一个有效的答案,因为计数不是它应该是什么样子(没有被覆盖)但是我不能写50条代表而没有代表。抱歉)