0

Trying to create an infinite counter that starts at 10.41 and increases by 10.41 every second. Have looked at various tutorials but I cannot find one that will account for the increase with a decimal number unit (10.41) every second. This is the code I am using:

setTimeout(start, 0);

var i = 100;
var num = document.getElementById('number');

function start() {
  setInterval(increase, 100);
}

function increase() {
    if (i < 100000) {
      i++;
      num.innerText = i;
    }
}
Praveen Kumar Purushothaman
  • 164,888
  • 24
  • 203
  • 252
Cherubrock74
  • 35
  • 1
  • 7

2 Answers2

1

If I understand correctly, all you need to do is, instead of i++ you need to use i += 10.41. I have also changed the initial i value to zero because you want it to start from 10.41 and timer to 1000 instead of 100:

setTimeout(start, 0);

var i = 0;
var num = document.getElementById('number');

function start() {
  increase();
  setInterval(increase, 1000);
}

function increase() {
  if (i < 100000) {
    i += 10.41;
    num.innerText = i.toFixed(2);
  }
}
<span id="number"></span>

Also, I truncated it off to two decimal places using i.toFixed(2);.

Praveen Kumar Purushothaman
  • 164,888
  • 24
  • 203
  • 252
1

I would do like:

function Incro(increment, interval, execFunc){
  let iv;
  this.increment = increment; this.interval = interval; this.execFunc = execFunc; this.sum = 0;
  this.start = ()=>{
    iv = setInterval(()=>{
      this.sum += this.increment; this.execFunc();
    }, this.interval);
    return this;
  }
  this.stop = ()=>{
    clearInterval(iv); iv = undefined;
  }
}
const incro = new Incro(10.41, 1000, function(){
  console.clear(); console.log(this.sum.toFixed(2));
  if(this.sum > 100)this.stop();
});
console.log('0.00');
incro.start();
setTimeout(()=>{
  incro.stop();
  setTimeout(()=>{
    incro.start();
  }, 2000);
}, 5150);

As you can see JavaScript time is not exact.

StackSlave
  • 10,613
  • 2
  • 18
  • 35