La virgola che ha gonfiato ogni prezzo europeo di 100 volte

Un parser di prezzi che eliminava le virgole leggeva il tedesco 9,99 € come 999. Nulla si è bloccato, nulla sembrava sbagliato, e il modello di ricavi riportava silenziosamente cifre cento volte troppo grandi.

I prezzi sono l'unico input in cui un errore di ordine di grandezza appare del tutto plausibile su un grafico. Un'app in abbonamento che mostra $6,499 all'anno è assurda se ti fermi a pensarci, e del tutto insignificante se stai scorrendo una dashboard.

Cosa faceva il codice

Il parser rimuoveva i separatori delle migliaia prima di confrontare le cifre, il che è corretto per l'inglese e sbagliato per gran parte dell'Europa. Lo storefront tedesco mostra 9,99 €, la virgola è il punto decimale, e rimuovendola si ottiene 999.

Poiché il modello di ricavi legge la scala dei prezzi dallo storefront attualmente visualizzato, l'apertura di un'app tracciata nella scheda tedesca le ha fornito un prezzo di ancoraggio di 6,499 invece di 44.36. Una sovrastima di 147x, senza errori, senza avvisi e senza sintomi visibili.

La correzione, e perché il rilevamento della localizzazione era la risposta sbagliata

La riparazione ovvia è cercare lo storefront e applicare la sua convenzione. Non l'abbiamo fatto, perché il parser riceve anche stringhe di cui non può essere certo dell'origine, e una ricerca che ricade silenziosamente sull'inglese ricrea il bug in una forma più difficile da trovare.

Invece il separatore decimale è determinato dalla posizione. Se compaiono sia un punto che una virgola, quello più a destra è il punto decimale: 1.234,56 e 1,234.56 vengono entrambi analizzati correttamente senza sapere da quale paese provengano. Se ne compare solo uno, è un separatore delle migliaia quando è seguito esattamente da tre cifre, altrimenti è un punto decimale.

Lo stesso bug, con un suffisso diverso

Poi l'Indonesia. Apple mostra 829,000 rupie come "Rp 829ribu", dove ribu in indonesiano significa mille. Letto letteralmente sono 829 rupie, circa cinque centesimi di dollaro, che rispetto a un prezzo americano di $69.99 sarebbe stato pubblicato come il risultato di localizzazione più eclatante sullo schermo.

Le parole di grandezza ora sono gestite. Ma quella tabella non potrà mai essere completa, perché qualsiasi storefront potrebbe mostrare una parola che nessuno da questa parte ha mai visto, quindi c'è anche un limite minimo: un prezzo che convertito risulta inferiore a 2% del mercato di base viene trattenuto come inaffidabile invece di essere pubblicato. Il mercato autentico più economico che misuriamo, la Turchia, si attesta a 5%, quindi la salvaguardia intercetta errori di ordine di grandezza senza mettere in dubbio i prezzi reali.

Correlati

Blog · Casi di studio · Free ASO tools · Prodotti · Privacy e termini · AsoTheory