Como Contar a Quantidade de Dígitos de um Número em PHP
Neste tutorial do nosso Curso de PHP, vamos resolver a Questão 13 da nossa famosa lista de exercícios de funções. O desafio parece simples, mas esconde vários conceitos importantes de manipulação de dados:
1. A Abordagem Web: A Função strlen()
No desenvolvimento Web, quando um usuário digita algo em um formulário HTML (um campo <input>) e envia para o PHP via $_GET ou $_POST, esse dado chega nativamente no formato de String (texto).
Ou seja, se o usuário digitar o ano 2026, o PHP vai enxergar isso como a string "2026". Sendo um texto, a forma mais fácil de contar quantos "caracteres" existem ali é usando a função nativa strlen() (String Length - Comprimento da String):
function tamanhoDigitos($numero){
return strlen($numero);
}
// echo tamanhoDigitos("2026"); // Retorna 4
2. E se a variável for puramente um Inteiro (Int)?
Se o número não veio de um formulário, mas sim de um cálculo matemático interno do sistema (ex: $n = 150 * 3;), ele será do tipo Integer. A função strlen() espera receber strings. O que fazer?
A solução é forçar a conversão do número para string antes de contar. Chamamos isso de Type Casting. Você pode fazer isso de duas formas simples no PHP:
- ✅ Usando o comando (string):
$texto = (string) $numero; - ✅ Concatenando com aspas vazias:
$texto = $numero . "";
🛡️ O Perigo dos Números Negativos!
Se o usuário digitar -350, a função strlen("-350") vai retornar 4, pois ela conta o sinal de menos como um caractere! Para corrigir isso, devemos passar o número pela função abs() (Valor Absoluto), que transforma qualquer número negativo em positivo, removendo o sinal.
3. Curiosidade: A Abordagem Lógica/Matemática
Se você estiver prestando um concurso público ou entrevista de emprego, o avaliador pode pedir para você contar os dígitos sem usar funções prontas de texto. Como fazer isso usando apenas a matemática pura?
Basta criar um laço while (enquanto) que divide o número por 10 sucessivamente até ele chegar a zero, contando quantas divisões foram feitas:
function contarComMatematica($n) {
$n = abs($n); // Remove o sinal negativo
if ($n == 0) return 1; // O zero tem 1 dígito
$digitos = 0;
while ($n >= 1) {
$digitos++;
$n = $n / 10; // "Corta" o último número
}
return $digitos;
}
Para os amantes da matemática avançada, o número de dígitos $d$ de um inteiro $n$ positivo pode ser descoberto instantaneamente usando logaritmos na base 10:
$$d = \lfloor \log_{10}(n) \rfloor + 1$$No PHP, isso seria escrito como: floor(log10($n)) + 1. Incrível, não é?
O Código Completo (Script Web)
Vamos juntar tudo em uma interface bonita onde o usuário pode testar livremente:
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title>Contador de Dígitos - PHP</title>
<style>
.box { max-width: 400px; margin: 30px auto; text-align: center; font-family: sans-serif; border: 2px solid #94a3b8; border-radius: 8px; padding: 25px; background-color: #f8fafc; }
input[type="number"] { padding: 12px; width: 80%; margin-bottom: 20px; border: 1px solid #cbd5e1; border-radius: 4px; font-size: 18px; text-align: center; }
.btn { background-color: #0f172a; color: white; border: none; padding: 12px 25px; border-radius: 4px; cursor: pointer; font-size: 16px; font-weight: bold; width: 88%; }
.btn:hover { background-color: #334155; }
.result { margin-top: 20px; padding: 15px; background: #dbeafe; color: #1e3a8a; border-radius: 4px; font-weight: bold; font-size: 1.2em; }
</style>
</head>
<body>
<div class="box">
<h2>🔢 Contador de Algarismos</h2>
<form action="" method="get">
<input type="number" name="numero" required placeholder="Digite um número longo..." />
<button type="submit" class="btn">Contar Dígitos</button>
</form>
<?php
// A nossa função otimizada
function contarDigitos($n) {
// 1. O abs() remove o sinal de negativo caso exista
$numeroLimpo = abs($n);
// 2. O strlen() conta os caracteres
return strlen((string) $numeroLimpo);
}
// Verifica se o formulário foi enviado
if(isset($_GET['numero'])) {
$num_digitado = $_GET['numero'];
$quantidade = contarDigitos($num_digitado);
echo "<div class='result'>";
echo "O número $num_digitado possui <br> <span style='font-size:1.5em; color:#1d4ed8;'>$quantidade dígitos</span>";
echo "</div>";
}
?>
</div>
</body>
</html>
Eleve sua Lógica de Programação! 🧠
Entender os bastidores das funções e conseguir resolver problemas de várias maneiras diferentes é o que separa os amadores dos programadores profissionais. Baixe a nossa Apostila Completa de PHP e tenha acesso a centenas de algoritmos e exercícios detalhados!
Baixar Apostila Completa de PHP