모든 유럽 가격을 100배 부풀린 쉼표

쉼표를 제거한 가격 파서는 독일의 9,99 €를 999로 읽었습니다. 아무것도 충돌하지 않았고, 아무것도 잘못 보이지 않았으며, 수익 모델은 조용히 100배나 큰 수치를 보고했습니다.

가격은 자릿수 오류가 차트에서 완전히 그럴듯해 보이는 유일한 입력입니다. 구독 앱이 연간 $6,499라고 표시되면 멈춰서 생각해보면 터무니없지만, 대시보드를 훑어보는 중에는 전혀 눈에 띄지 않습니다.

코드가 한 일

파서가 숫자를 일치시키기 전에 천 단위 구분자를 제거했는데, 이는 영어에는 맞지만 대부분의 유럽에는 틀립니다. 독일 스토어프런트는 9,99 €를 출력하고, 쉼표가 소수점이며, 이를 제거하면 999이 됩니다.

수익 모델이 화면에 표시된 스토어프런트에서 가격 사다리를 읽기 때문에, 독일 탭에서 추적 중인 앱을 열면 앵커 가격으로 6,499 대신 44.36이 입력되었습니다. 147배 과장된 값인데, 오류도, 경고도, 눈에 보이는 증상도 없었습니다.

수정, 그리고 로캘 감지가 틀린 답이었던 이유

명백한 수리는 스토어프런트를 조회하여 해당 관례를 적용하는 것입니다. 우리는 그러지 않았습니다. 파서는 출처를 확신할 수 없는 문자열도 받기 때문에, 조회가 조용히 영어로 폴백되면 버그가 더 찾기 어려운 형태로 재현되기 때문입니다.

대신 소수점 구분자는 위치로 결정됩니다. 점과 쉼표가 모두 나타나면 가장 오른쪽에 있는 것이 소수점입니다: 1.234,56과 1,234.56은 어느 나라에서 왔는지 알 수 없어도 모두 올바르게 구문 분석됩니다. 하나만 나타나면, 정확히 세 자리 숫자가 뒤따를 때는 천 단위 구분자이고, 그 외에는 소수점입니다.

같은 버그, 다른 접미사를 달고

그다음 인도네시아. Apple은 829,000 루피아를 "Rp 829ribu"로 출력하는데, 여기서 ribu는 인도네시아어로 천을 뜻합니다. 문자 그대로 읽으면 829 루피아, 약 5센트인데, 미국 가격 $69.99에 대비하면 화면에서 가장 극적인 현지화 발견으로 게시되었을 것입니다.

이제 크기를 나타내는 단어가 처리됩니다. 하지만 어떤 스토어프런트든 이쪽에서 본 적 없는 단어를 출력할 수 있으므로 그 표는 결코 완전할 수 없습니다. 그래서 하한선도 있습니다: 기준 시장의 2% 미만으로 환산되는 가격은 신뢰할 수 없는 것으로 보류하고 게시하지 않습니다. 우리가 측정한 가장 저렴한 실제 시장인 튀르키예는 5%에 있으므로, 이 가드는 실제 가격을 의심하지 않으면서 자릿수 오류를 잡아냅니다.

관련

블로그 · 사례 연구 · Free ASO tools · 제품 · 개인정보 및 약관 · AsoTheory