Добавить цифру к интервалу, не преобразовывая в строку?

Автоматическая перезагрузка с целью по вашему выбору. В этом случае цель _self устанавливается каждые 5 минут.

300000 миллисекунд = 300 секунд = 5 минут

при 60000 миллисекунд = 60 секунд = 1 минута .

Вот как вы это делаете:

<script type="text/javascript">
function load()
{
setTimeout("window.open('http://YourPage.com', '_self');", 300000);
}
</script>
<body onload="load()">

Или это, если это та же страница, чтобы перезагрузить себя:

<script type="text/javascript">
function load()
{
setTimeout("window.open(self.location, '_self');", 300000);
}
</script>
<body onload="load()">
8
задан nmuntz 26 May 2009 в 19:29
поделиться

4 ответа

Ваш лучший выбор - это умножение на 10 и сложение значения. Вы можете выполнить простую проверку следующим образом:

assert(digit >= 0 && digit < 10);
newValue = (oldValue * 10) + digit;
if (newValue < oldValue)
{
    // overflow
}
25
ответ дан 5 December 2019 в 05:19
поделиться

Для предотвращения переполнения:

if ((0 <= value) && (value <= ((MAX_INT - 9) / 10))) {
    return (value * 10) + digit;
}

Вместо MAX_INT вы можете использовать std :: numeric_limits :: max () или подобное, чтобы поддерживает типы, отличные от int.

3
ответ дан 5 December 2019 в 05:19
поделиться
  assert(digit >= 0 && digit < 10);
  newvalue = 10 * oldvalue;
  if (oldvalue < 0 ) {
    newvalue -= digit;
  } else {
    newvalue += digit;
  }

  // check for overflow SGN(oldvalue) == 0 || SGN(newvalue) == SGN(oldvalue)
2
ответ дан 5 December 2019 в 05:19
поделиться

Вот лучший и более пуленепробиваемый реализация, чем тот, который был принят в качестве ответа, который также быстрый:

#include <climits>
#include <cassert>

unsigned int add_digit(unsigned int val, unsigned int digit)
{
   // These should be computed at compile time and never even be given a memory location
   static const unsigned int max_no_overflow = (UINT_MAX - 9) / 10U;
   static const unsigned int max_maybe_overflow = UINT_MAX / 10U;
   static const unsigned int last_digit = UINT_MAX % 10;

   assert(digit >= 0 && digit < 10);
   if ((val > max_no_overflow) && ((val > max_maybe_overflow) || (digit > last_digit))) {
      // handle overflow
   } else {
      return val * 10 + digit;
   }
   assert(false);
}

Вы также должны быть в состоянии сделать это в встроенной функции. Проверка переполнения почти всегда будет короткая цепью после первого сравнения. Пункт после && - это просто так, чтобы вы могли (в случае 32-битного целого числа дополнительного вмешательства) добавляют 5 до конца 429496729, но не 6.

2
ответ дан 5 December 2019 в 05:19
поделиться
Другие вопросы по тегам:

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