Добавьте десятичное число к JQuery числу до - PullRequest
1 голос
/ 09 апреля 2020

Привет всем У меня есть следующий код, чтобы подсчитать число из фигуры в моей базе данных. Если я установлю число, чтобы считать как десятичное число, например, 0,2, это нарушает сценарий. Вместо этого я хочу, чтобы он считал до одного знака после запятой, например, если он равен 0,2, то каждую секунду он будет считать 0,2 -> 0,4 ​​-> 0,6 и т. Д. c. Очевидно, что если эта цифра просто сказать 3, она все равно должна считать 3 -> 6 -> 9 и т. Д. c.

Не могу понять, как это сделать! Пожалуйста, помогите!

<script>
  $(document).ready(function() {
    timer = setInterval("countUP()", 1000);
  });

  var counter = 0;
  var timer;

  function countUP() {
    var go = document.getElementsByClassName("standard");
    for (var i = 0; i < go.length; i++) {
      speed = parseInt(go[i].getAttribute('data-speed'));
      go[i].setAttribute('data-counter', +go[i].getAttribute('data-counter') + speed);
      go[i].innerHTML = numberWithCommas(go[i].getAttribute('data-counter'));
      }
    }
    function numberWithCommas(x) {
x = x.toString();
var pattern = /(-?\d+)(\d{3})/;
while (pattern.test(x))
    x = x.replace(pattern, "$1,$2");
return x;}
</script>

У меня тогда есть это в моей главной html:

<div class="<?php echo $row["countuptype"]; ?>" data-speed="<?php echo $row["countupspeed"]; ?>">0</div>

1 Ответ

1 голос
/ 09 апреля 2020

Отметьте это:

$(document).ready(function() {
    timer = setInterval("countUP()", 1000);
});

var counter = 0;
var timer;

function countUP() {
    var go = document.getElementsByClassName("standard");
    for (var i = 0; i < go.length; i++) {
        speed = parseFloat(go[i].getAttribute('data-speed'));
        go[i].setAttribute('data-counter', +go[i].getAttribute('data-counter') + speed);
        go[i].innerHTML = numberWithCommas(parseFloat(go[i].getAttribute('data-counter')).toFixed(speed.countDecimals()));
    }
}
function numberWithCommas(x) {
    x = x.toString();
    var pattern = /(-?\d+)(\d{3})/;
    while (pattern.test(x))
    x = x.replace(pattern, "$1,$2");
    return x;
}

Number.prototype.countDecimals = function () {
    if(Math.floor(this.valueOf()) === this.valueOf()) return 0;
    return this.toString().split(".")[1].length || 0; 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="standard" data-speed="0.2">0</div>

Скорость должна принимать parseFloat вместо parseInt, чтобы принимать значения с плавающей точкой в ​​качестве скорости.

И тогда вы можете получить некоторые странные числа вроде 0.899999999 из-за точности с плавающей точкой . Чтобы предотвратить это, я использовал toFloat, передающий точность скорости непосредственно перед печатью значения.

А остальное - это то, что вы имели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...