A vírgula que inflacionou todos os preços europeus em 100x

Um analisador de preço que removeu vírgulas leu o alemão 9,99 € como 999. Nada travou, nada parecia errado, e o modelo de receita silenciosamente reportou valores cem vezes maiores.

Preços são a única entrada onde um erro de ordem de magnitude parece completamente plausível em um gráfico. Um app de subscrição mostrando $6,499 por ano é absurdo se você parar e pensar, e totalmente comum se você estiver escaneando um painel.

O que o código fez

O analisador removeu separadores de milhar antes de corresponder dígitos, o que é correto para inglês e errado para a maior parte da Europa. A loja alemã imprime 9,99 €, a vírgula é o ponto decimal, e removê-la produz 999.

Como o modelo de receita lê a escada de preços de qualquer loja que esteja no ecrã, abrir um app rastreado na aba alemã o alimentou com um preço âncora de 6,499 em vez de 44.36. Um exagero de 147x, sem erro, sem aviso e sem sintoma visível.

A correção, e por que a detecção de localidade foi a resposta errada

O reparo óbvio é consultar a loja e aplicar sua convenção. Não fizemos isso, porque o analisador também recebe strings cuja origem não pode ter certeza, e uma consulta que silenciosamente volta para o inglês recria o bug de uma forma mais difícil de encontrar.

Em vez disso, o separador decimal é decidido pela posição. Se aparecerem um ponto e uma vírgula, o mais à direita é o ponto decimal: 1.234,56 e 1,234.56 são analisados corretamente sem ideia de qual país vieram. Se aparecer apenas um, é um separador de milhar quando exatamente três dígitos o seguem, e um ponto decimal caso contrário.

O mesmo bug, usando um sufixo diferente

Depois Indonésia. A Apple imprime 829,000 rupias como "Rp 829ribu", onde ribu é indonésio para mil. Lido literalmente, isso é 829 rupias, cerca de cinco centavos de dólar, o que contra um preço americano de $69.99 teria sido publicado como a descoberta de localização mais dramática no ecrã.

Palavras de magnitude agora são tratadas. Mas essa tabela nunca pode estar completa, porque qualquer loja pode imprimir uma palavra que ninguém deste lado viu, então também há um piso: um preço que converte para menos de 2% do mercado base é retido como não confiável em vez de publicado. O mercado genuíno mais barato que medimos, Türkiye, fica em 5%, então a proteção captura erros de ordem de magnitude sem questionar preços reais.

Relacionado

Blog · Estudos de caso · Free ASO tools · Produtos · Privacidade e termos · AsoTheory