#php #math #modulus
#php #математика #модуль
Вопрос:
У меня есть внутренний счетчик, который отсчитывает от 0-99999999999999.
Я бы хотел, чтобы это отображалось как число в диапазоне от 0 до 99999, затем повторное выполнение.
Это означает:
- 0 отображается как 1
- 1 отображается как 2
- 9998 отображается как 9999
- …
- 9999 отображается как 1
- 10000 отображается как 2
- …
- 19999 отображается как 1
- 20000 отображается как 2
Редактировать:
Ответом было 1 $ number % 9999 (спасибо @Brad Christie). Моя таблица ожидаемых результатов неверна. (Спасибо @Tevo D)
Комментарии:
1. Вы слышали об операторе modulo (%)?
2. @djdy, по модулю, но у меня возникли проблемы с поиском элегантного ответа, который работает последовательно для всех чисел.
3. Что вы подразумеваете под «все большими остатками»? % является остатком после деления и всегда равно 0 .. модуль-1
Ответ №1:
$x = 9280293;
$baseNineNineNineNine = $x % 9999;
Используйте MOD, он выдаст вам остаток после 9999 (например, любое число, деленное на 9999, может идти в N раз, с остатком от Y (в итоге вы получите Y в качестве значения)
Для чисел, которые вы ищете, вы можете использовать 1
любое значение, полученное после MOD ( %
), или использовать 10000
Смотрите также Оператор модуля
Комментарии:
1. @JarebShubway: Я не уверен, что тогда я получу шаблон.
X % 9999 1
дает вам то, что вы хотите, за исключением1999
amp;20000
крайних случаев. Что делает эти два числа особенными? (Смотрите этот пример )
Ответ №2:
Примите напоминание с 10000, что гарантирует, что результат будет между 0 и 9999 и перевернется
$result = $int % 10000;
Комментарии:
1. использование % 10000 превратит числа типа 20000 в 0, чего я не хочу. Добавление 1 превратит 9999 в 10000, что также не то, чего я хочу.
Ответ №3:
Ваша таблица значений не соответствует тому, что вы запрашиваете. В примере вы используете 9999 значений результата (1-9999) для 10000 входных значений. В тексте вы указываете 10000 выходных значений (0-9999).
Вот то, о чем, я думаю, вы действительно просите. Этот алгоритм выведет 1-9999, а затем снова перейдет к 1.
Другими словами, это решение предоставит четырехзначное ненулевое значение:
$result = $int % 9999 1;
Выходные данные не будут соответствовать вашему примеру, поскольку в вашем примере он переносится на каждые 10000 значений, а не на 9999. Вот результат:
input output
0 1
1 2
.... ....
9997 9998
9998 9999
9999 1 <--- 9999 * 1
10000 2
.... ....
19996 9998
19997 9999
19998 1 <--- 9999 * 2
19999 2
.... ....
19995 9998
19996 9999
19997 1 <--- 9999 * 3
19998 2
.... ....
Комментарии:
1. Замечание принято, и молодец, что ты единственный, кто это распознал. Похоже, вы правы!