Так по какой-то причине, когда я использую count_chars(11111111111111111111,3)
Я возвращаю что-то с эффектом .1111111111111119
Есть ли другой способ подсчета случаев каждого символа в строке?
Вот пример кода
$value = 11111111111111111111;
$value = strval($value);
$count = count_chars($value,3);
print_r($count);
Если я распечатываю результат, я получаю + .012E
Если вы хотите посчитать символы в строка, дать строка…
count_chars('11111111111111111111',3)
PS: и если вы действительно хотите считать символы, используйте режим 1
$res = count_chars('1111111111111111111122333', 1);
foreach ($res as $char => $number) {
echo chr($char). ' ' . $number .'<br />';
}
Проблема в том, что вы используете не целые числа, а числа с плавающей запятой.
А с такими большими поплавками они будут показаны научным способом (с E).
Так 11111111111111111111
становится 1.1111111111111E+19
(в математике это то же самое число).
Если вы преобразуете его в строку (приведение, strval()
), здесь будет второй.
И потому что у вас будет 1.1111111111111E+19
в виде строки вы получите результат, который вы нам дадите.
Решение этого? У вас есть несколько, но они не так хороши.
Лучший способ думать, это использовать number_format функция:
$value = number_format($value, 0, '', '');
Вместо этого, если strval()
функция.
Большая проблема здесь в том, что с плавающей точкой недостаточно для этого. Вы получите проблемы с округлением. Смотрите больше информации Вот.
На моем компьютере строка станет 11111111111111110656
потому что он округляется до 1111111111111111.0656
,
Если вы знаете длину целого числа (16 в данном случае), вы можете использовать substr()
для этого, но снова: это будет только обходной путь.