De komma die elke Europese prijs met 100x opblies

Een prijsparser die komma's verwijderde las de Duitse 9,99 € als 999. Niets crashte, niets zag er verkeerd uit, en het omzetmodel rapporteerde stilletjes cijfers die honderd keer te groot waren.

Prijzen zijn de enige invoer waarbij een fout van een factor tien er op een grafiek volkomen plausibel uitziet. Een abonnementsapp dat $6,499 per jaar toont is absurd als je even nadenkt, en volkomen onopvallend als je een dashboard scant.

Wat de code deed

De parser verwijderde scheidingstekens voor duizendtallen voordat cijfers werden gematcht, wat correct is voor Engels en fout voor het grootste deel van Europa. De Duitse storefront drukt 9,99 € af, de komma is het decimaalteken, en het verwijderen ervan levert 999 op.

Omdat het verdienmodel de prijsladder leest van welke storefront er ook op het scherm staat, kreeg een getrackte app op het Duitse tabblad een ankerprijs van 6,499 in plaats van 44.36. Een overschatting van 147x, zonder foutmelding, zonder waarschuwing en zonder zichtbaar symptoom.

De oplossing, en waarom lokalisatiedetectie het verkeerde antwoord was

De voor de hand liggende reparatie is om de storefront op te zoeken en de conventie ervan toe te passen. Dat hebben we niet gedaan, omdat de parser ook strings krijgt waarvan de herkomst niet zeker is, en een opzoeking die stilletjes terugvalt op Engels de bug opnieuw creëert in een moeilijker te vinden vorm.

In plaats daarvan wordt het decimaalteken bepaald door de positie. Als zowel een punt als een komma voorkomen, is het meest rechtse teken het decimaalteken: 1.234,56 en 1,234.56 worden beide correct geparseerd zonder te weten uit welk land ze komen. Als er maar één voorkomt, is het een scheidingsteken voor duizendtallen wanneer er precies drie cijfers op volgen, en anders een decimaalteken.

Dezelfde bug, met een ander achtervoegsel

Toen Indonesië. Apple drukt 829,000 roepia af als "Rp 829ribu", waarbij ribu Indonesisch is voor duizend. Letterlijk gelezen is dat 829 roepia, ongeveer vijf Amerikaanse cent, wat tegenover een Amerikaanse prijs van $69.99 zou zijn gepubliceerd als de meest dramatische lokalisatiebevinding op het scherm.

Woorden voor grootte-ordes worden nu afgehandeld. Maar die tabel kan nooit compleet zijn, omdat elke storefront een woord kan afdrukken dat niemand hier ooit heeft gezien, dus is er ook een ondergrens: een prijs die omgerekend onder 2% van de basismarkt uitkomt, wordt als onbetrouwbaar achtergehouden in plaats van gepubliceerd. De goedkoopste echte markt die we meten, Türkiye, zit op 5%, dus de bewaking vangt fouten van een factor tien op zonder echte prijzen in twijfel te trekken.

Gerelateerd

Blog · Casestudy's · Free ASO tools · Producten · Privacy en voorwaarden · AsoTheory