Uma regra simples que muita gente complica sem precisar
Um número é divisível por 10 quando o resto da divisão por 10 é zero. Na prática, isso significa que ele termina em 0. É isso. Nenhuma conta de dividir, nenhum algoritmo complexo. O último dígito é tudo o que importa. Eu já vi gente passando meia hora em planilhas tentando justificar se um número grande era divisível por 10. Basta olhar a unidade. Se for 0, tá ok. Se não for, não é. Achei isso há uns anos trabalhando com conciliação financeira, onde tínhamos milhares de valores para verificar e o sistema não estava categorizando corretamente os pagamentos que vieram arredondados.
O que são numeros divisiveis por 10 na prática
A definição formal diz que um inteiro n é divisível por 10 se existe outro inteiro k tal que n = 10 × k. Isso parece óbvio até você tentar aplicar em problemas reais e se confundir com decimais, negativos ou valores formatados como texto. Já perdi tempo porque um sistema gravava "100,00" como string e minha verificação de módulo não funcionava. A solução foi converter para número antes de qualquer cheque. Os números divisíveis por 10 formam uma progressão aritmética: 0, 10, 20, 30, 40... e os negativos também contam, então -50, -120 e assim por diante também satisfazem a condição. Zero é divisível por 10, sim. Muita gente trava aí e ach que não é, mas 0 ÷ 10 = 0 com resto zero, então entra na lista.
Como verificar na mão e no código
Na mão, você olha o último dígito. Em Python, usaria numero % 10 == 0. Em Excel, =MOD(A1;10)=0. Em JavaScript, numero % 10 === 0. A lógica é idêntica em qualquer lugar. O operador módulo retorna o resto da divisão e, se for zero, o número é divisível. O problema real aparece quando você trabalha com floats. Floating point é traiçoeiro. 10.0 % 10 em algumas línguas pode retornar algo como 1.7763568394002505e-15 por causa de imprecisão binária, e aí seu teste falha mesmo sendo um número que claramente termina em zero. A gambiarra funcional é usar Math.round(numero * 100) / 100 antes de aplicar o módulo, ou trabalhar sempre com inteiros multiplicando por uma potência de 10 adequada.
Outro ponto que todo mundo esquece: números negativos. -30 é divisível por 10? Sim. O resto da divisão de -30 por 10 é zero em qualquer convenção razoável. Testei isso em três linguagens diferentes e o comportamento foi consistente. Mas vale confer no sistema que você vai rodar, porque algumas implementações de módulo com números negativos seguem convenções diferentes.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Erros comuns que eu já vi darem dor de cabeça
A primeira armadilha é confiar cegamente na formatação visual. Um número pode estar exibido como "1.000" num relatório e parecer terminado em zero, mas ser 1000 sem vírgula decimal, ou pode ser 1000,5 e a máscara simplesmente esconder o decimal. Sempre verifique o valor real, não a apresentação. A segunda é esquecer que divisibilidade por 10 implica divisibilidade por 2 e por 5 também. Se um número é divisível por 10, ele obrigatoriamente é par e termina em 0 ou 5. Se o seu teste de divisibilidade por 10 passa mas o teste por 2 falha, algo está errado na sua implementação. Use isso como sanity check.
Existe um terceiro erro que é mais sutil. Às vezes você tem um número como 010 ou 00100 e acha que tem zero à esquerda porque é inválido, mas em muitas bases numéricas o zero à esquerda não muda o valor. 010 em decimal é simplesmente 10. O problema surge mesmo em parsing automático, onde o interpretador pode interpretar como octal dependendo da linguagem. Em Python 3 isso já não acontece, mas em outras linguagens ainda ocorre. Sempre especifique a base explicitamente quando for fazer parsing de strings.
Quando a regra simples não serve
A verificação pelo último dígito funciona perfeitamente para inteiros. Mas se você está lidando com precisão financeira, onde os valores podem ter casas decimais e precisam ser arredondados, aí a coisa muda. Um valor como 9,999999999 pode ser tecnicamente divisível por 10 dentro da precisão do sistema, mas não na vida real. Nesses casos, eu costumo arredondar para duas casas decimais primeiro e depois aplicar a verificação. Isso eliminou cerca de 80% dos falsos positivos no meu último projeto de auditória automática. Também não adianta tentar usar essa lógica em contextos onde o número não é exatamente representável. Números com frações como 1/3 nunca serão divisíveis por 10 de forma exata, não importa quantas casas decimais você considere. Se o seu domínio exige verificação de divisibilidade para valores fracionários, você precisa definir uma tolerância antes, senão vai gastar tempo chasing roundoff errors que não têm solução definitiva.
Se o seu cenário envolve números extremamente grandes além da precisão do tipo inteiro nativo da linguagem, aí você migra para bibliotecas de arbitrary precision. Python resolve isso nativamente. Em JavaScript, use BigInt. Em C ou Java, existem bibliotecas como GMP ou BigInteger respectivamente. Sem isso, você vai bater em limite de representação e seu teste de módulo simplesmente produzirá resultados errados silenciosamente.