那个让每个欧洲价格膨胀 100 倍的逗号
一个剥离逗号的价格解析器将德国的9,99 €读作999。没有崩溃,没有看起来错误,收入模型悄悄地报告了比实际大一百倍的数字。
价格是唯一一个在图表上看起来完全合理的数量级错误输入。一个订阅应用显示每年 $6,499,如果你停下来想一想是荒谬的,但如果你在扫视仪表板,就完全不起眼。
代码做了什么
解析器在匹配数字之前去掉了千位分隔符,这对英语是正确的,对欧洲大部分地区是错误的。德国商店打印 9,99 €,逗号是小数点,去掉它会产生 999。
由于收入模型从当前屏幕上的任何商店读取价格阶梯,在德国标签页打开一个受跟踪的应用时,它被喂入了一个锚定价格 6,499 而不是 44.36。一个 147 倍的夸大,没有错误、没有警告,也没有可见的症状。
修复,以及为什么区域检测是错误的答案
显而易见的修复是查找商店并应用其惯例。我们没有这样做,因为解析器也会收到无法确定来源的字符串,而一个静默回退到英语的查找会以更难发现的形式重现这个错误。
相反,小数点分隔符由位置决定。如果同时出现点和逗号,最右边的是小数点:1.234,56 和 1,234.56 都能正确解析,但无法知道它们来自哪个国家。如果只出现一个,当它后面恰好有三位数字时是千位分隔符,否则是小数点。
同一个错误,换了个后缀
然后是印度尼西亚。苹果将 829,000 印尼盾打印为 "Rp 829ribu",其中 ribu 在印尼语中是千的意思。按字面读就是 829 印尼盾,大约五美分,相对于 $69.99 的美国价格,这本来会被发布为屏幕上最引人注目的本地化发现。
数量级词现在已处理。但那张表永远不可能完整,因为任何商店都可能打印出一个这边没人见过的词,所以还有一个下限:换算后低于基础市场 2% 的价格会被视为不可靠而不发布。我们测量到的最便宜的真实市场是土耳其,位于 5%,因此这个防护能捕捉数量级错误,而不会质疑真实定价。