Como Contar a Quantidade de Dígitos de um Número em PHP

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:

"Faça um programa e uma função que informe a quantidade de dígitos (algarismos) de um determinado número inteiro informado pelo usuário."

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

Nenhum comentário: