价格与数字格式检查器
1,234 在英语里是一千二百三十四,在德语里是 1.234。同样的字符,相差一千倍,而没有任何导入器会提醒你。粘一个价格进来,看看你的那个有没有歧义。
🔒 你的数据不会离开浏览器。
商品 feed 里最贵的那个无声 bug
德国的导出把十九块九毛九写成 19,99。一个英语解析器把逗号当成千位分隔符、丢掉它,存成 1999。没有报错、没有警告、没有被拒的行 —— 只有一件价格高了一百倍的商品,直到有人发现为止。
这个陷阱是具体、可辨认的:一个分隔符,后面恰好跟三位数字。1,234 与 1.234 才是真有歧义的,因为两种读法在某个地方都成立。其余情况 —— 两位小数、两种分隔符都在、或者根本没有分隔符 —— 只有一种说得通的读法,本工具会照直说,而不是逢事就报警。
为什么 feed 要的是货币代码而不是符号
$ 被二十多种货币使用,kr 被好几个北欧国家使用,¥ 则同时是日元和人民币。所以 Google 购物和其他所有 feed 规范要的都是 ISO 4217 代码:19.99 USD,不是 $19.99。
并不是每种货币都有两位小数
「默认两位」是个看着很安全的 bug。不带小数的货币:JPY, KRW, VND —— 写成 1500.00 JPY 本身就是错的。三位小数的货币:BHD, KWD。
小数位数与货币对不上的值,往往说明这个数在上游某处被错误地缩放或换算过。
本工具执行的全部检查(8 条规则)
NUM-A01小数分隔符有歧义
只有一个逗号或句点、且后面恰好三位数字时,它既可能是小数分隔符,也可能是千位分隔符。“1,234” 在英语里是一千二百三十四,在德语里是 1.234 —— 同样的字符,相差一千倍,而没有任何解析器分得出你要的是哪个。
修复: 改用没有歧义的写法:小数点用句点、完全不用千位分隔符,价格一律保留两位小数(1234.00)。
来源: ISO 4217 currency codes and the decimal/grouping conventions used across locales. The ambiguity analysis is derived from the notation itself, not from a locale guess.
NUM-A02用逗号作小数分隔符
这个值用逗号表示小数(欧洲习惯)。多数 feed 规范 —— 包括 Google 购物 —— 要求用句点,逗号要么被拒收,要么被静默读成千位分隔符。
修复: 把逗号换成句点。
来源: ISO 4217 currency codes and the decimal/grouping conventions used across locales. The ambiguity analysis is derived from the notation itself, not from a locale guess.
NUM-A03存在千位分隔符
分组分隔符是给人看的,不是数据。Feed 与 API 一般会拒收它们,而一个忽略它们的解析器会静默地给出另一个数。
修复: 去掉分组分隔符:写 1234.00,不写 1,234.00。
来源: ISO 4217 currency codes and the decimal/grouping conventions used across locales. The ambiguity analysis is derived from the notation itself, not from a locale guess.
NUM-A04分组写法不成立
分隔符重复出现,所以它不可能是小数点 —— 但数字分组也不是千位分隔符该产生的 3-3-3。“1,2,345” 这样的值来自坏掉的导出或手改过的单元格,每个解析器读出来都不一样。
修复: 去掉分隔符,拿这个数回你的真相源核对;不要假定哪一种读法是对的。
来源: ISO 4217 currency codes and the decimal/grouping conventions used across locales. The ambiguity analysis is derived from the notation itself, not from a locale guess.
NUM-C01货币代码不认识
这个三字母代码不在本工具携带的 ISO 4217 列表里。Feed 会因为不存在的货币代码被拒,常见原因是打错字或者自造缩写。
修复: 改用 ISO 4217 代码 —— USD、EUR、GBP、JPY 等等。
来源: ISO 4217 currency codes and the decimal/grouping conventions used across locales. The ambiguity analysis is derived from the notation itself, not from a locale guess.
NUM-C02用了货币符号而不是代码
该写代码的位置写了符号。符号是有歧义的 —— $ 被二十多种货币使用,£ 与 kr 也各自覆盖好几种 —— 所以 feed 规范要求三字母代码。
修复: 确认它到底是哪种货币之后,把符号换成 ISO 4217 代码。
来源: ISO 4217 currency codes and the decimal/grouping conventions used across locales. The ambiguity analysis is derived from the notation itself, not from a locale guess.
NUM-C03小数位数与该货币不符
多数货币用两位小数,但有些不用小数(JPY、KRW),少数用三位(BHD、KWD)。小数位数不对的价格,往往说明这个值被错误地换算或缩放过。
来源: ISO 4217 currency codes and the decimal/grouping conventions used across locales. The ambiguity analysis is derived from the notation itself, not from a locale guess.
NUM-F01不是数字
从这个输入里读不出任何数值。
来源: ISO 4217 currency codes and the decimal/grouping conventions used across locales. The ambiguity analysis is derived from the notation itself, not from a locale guess.
货币覆盖范围是 34 个常用 ISO 4217 代码。不在这份列表里的代码会被报成「不认识」而不是「无效」—— 它可能真实存在,只是这里没带上。
关于这些规则。 每一条都有编号、严重级别和通俗解释。每个来源链接都已登记在案,并对线上页面实际复验过,而不是凭印象写上去的. 规则如何编写、测试与保持更新 →