全球化新 v1.2.1 中的错误?解析 17 种文化(印度、孟加拉国、不丹)的某些数字 returns NaN

Globalize bug in new v1.2.1? Parsing certain numbers returns NaN for 17 cultures (India, Bangladesh, Bhutan)

Globalize 的新版本 1.2.1 中,我们看到 17 种文化对 "hundreds" 范围内的数字(例如 100 到 999)的解析失败。

这是一个使用 CLDR JSON data 版本 30.0.2 的具体示例(也使用 CLDR 30.0.3 数据进行了测试,结果相同):

var g = new Globalize("en-IN");
g.numberParser()(g.numberFormatter()(1000.01)); // prints 1000.01
g.numberParser()(g.numberFormatter()(999.99)); // prints NaN

据我所知,格式化数字 999.99 然后对其进行解析应该不会产生 NaN,因此这看起来像是一个错误。 NaN 也是数字 100 的结果,实际上它似乎是任何具有三位有效数字的数字的结果。

如果我们只关注解析步骤,我们会看到以下内容:

var g = new Globalize("en-IN");
console.log(g.numberParser()("1,000.01")) // prints 1000.01
console.log(g.numberParser()("100.01")) // prints NaN

如果我们使用版本 1.1.2 中较早的 Globalize 代码,则行为是正确的(即没有 NaN 问题)。

所讨论的 17 种文化是:as-IN,bn-BD,bn-IN,brx-IN,dz-BT,en-IN,gu-IN,hi-IN,kok-IN,ks-Arab-IN,ml-IN,mr-IN,or-IN,pa-IN,ta-IN,ta-LK,te-IN。在我们升级到 Globalize 1.2.1 后,我们的单元测试将它们全部提取出来。

我们想知道是否有人可以确认他们可以重现此内容(是否有用于执行此类操作的 jsfiddle 模板?),以及新版本 Globalize 中的哪些更改(假设它是一个Globalize 中的问题)导致了这个问题,因此我们也许可以 post 一个相应的问题。

更新:这已在 Globalize 1.2.2 中修复。


感谢您的精彩描述。这绝对是一个错误,我已将其归档为 https://github.com/globalizejs/globalize/issues/660