Работа с большими количествами в PHP

Изменить класс элемента в ванильном JavaScript с поддержкой IE6

Вы можете попытаться использовать свойство node attributes, чтобы поддерживать совместимость со старыми браузерами даже в IE6:

function getClassNode(element) {
  for (var i = element.attributes.length; i--;)
    if (element.attributes[i].nodeName === 'class')
      return element.attributes[i];
}

function removeClass(classNode, className) {
  var index, classList = classNode.value.split(' ');
  if ((index = classList.indexOf(className)) > -1) {
    classList.splice(index, 1);
    classNode.value = classList.join(' ');
  }
}

function hasClass(classNode, className) {
  return classNode.value.indexOf(className) > -1;
}

function addClass(classNode, className) {
  if (!hasClass(classNode, className))
    classNode.value += ' ' + className;
}

document.getElementById('message').addEventListener('click', function() {
  var classNode = getClassNode(this);
  var className = hasClass(classNode, 'red') && 'blue' || 'red';

  removeClass(classNode, 'red');
  removeClass(classNode, 'blue');

  addClass(classNode, className);
})
.red {
  color: red;
}
.red:before {
  content: 'I am red! ';
}
.red:after {
  content: ' again';
}
.blue {
  color: blue;
}
.blue:before {
  content: 'I am blue! '
}
<span id="message" class="">Click me</span>

52
задан sanxiyn 8 November 2008 в 20:20
поделиться

4 ответа

По некоторым причинам существует две стандартных библиотеки в PHP обработка произвольной длины / числа точности: до н.э Математика и GMP. Я лично предпочитаю GMP, поскольку это более ново и имеет более богатый API.

На основе GMP я реализовал класс Decimal2 для того, чтобы сохранить и обработать суммы валюты (как 100,25 доллара США). Много из ультрасовременных вычислений там w/o любые проблемы. Протестированный с очень большие количества.

53
ответ дан Ivan Krechetov 7 November 2019 в 19:08
поделиться
<?php
function add($int1,$int2){
    $int1 = str_pad($int1, strlen($int2), '0', STR_PAD_LEFT);
    $int2 = str_pad($int2, strlen($int1), '0', STR_PAD_LEFT);
    $carry = 0;
    $str = "";
    for($i=strlen($int1);$i>0;$i--){
        $var = $int1[$i-1] + $int2[$i-1] + $carry;
        $var = str_pad($var, 2, '0', STR_PAD_LEFT);
        $var = (string) $var;
        $carry = $var[0];
        $str = $str . $var[1];
    }
    $res = strrev($str.$carry);
    echo ltrim($res,"0");
}
add($int1,$int2);
?>
0
ответ дан 7 November 2019 в 09:08
поделиться

Вы смотрели на телефон bcmod() ? php имеет проблемы с целыми числами по 2^31 - 1 на платформах на 32 бита.

var_dump(bcmod("$x", '104659') ); // string(4) "2968"
20
ответ дан rodrigo-silveira 7 November 2019 в 19:08
поделиться

Я предлагаю, чтобы Вы попробовали BigInteger. Если это не удается, можно использовать БОЛЬШОЙ ГЛОТОК , чтобы добавить код C/C++ для больших целочисленных вычислений и связать его в код.

4
ответ дан Yuval F 7 November 2019 в 19:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: