Intl.Collator 和带数字选项的自然排序不正确地以小数排序

Intl.Collator and natural sort with numeric option sorts incorrectly with decimal numbers

使用 Intl.Collator 和启用 numeric 的选项对小数进行排序会错误地比较小数。

在某些浏览器上比较“0.005”和“0.05”returns“0”因为数字相同。

在不同浏览器中的结果:

// Returns 0
console.log(new Intl.Collator(undefined, { numeric: true}).compare(0.000005, 0.05))

谁能告诉我怎么了?

在 Firefox 中报告为错误:https://bugzilla.mozilla.org/show_bug.cgi?id=1312388

正如 André Bargull 在 the Firefox bug report 中观察到的那样,数字排序只考虑 十进制数字序列,即在数字的 Unicode 类别中,按它们的数值。也就是说,当比较两个包含十进制数和小数部分的其他相同字符串时,整个十进制数不被视为它们的数值——因为 U+002E FULL STOP 不在数字类别中(而是在标点符号中类别)。

那么,当我们比较这两个字符串时——“0.05”和“0.000005”——我们实际上是在比较这些元素数组:

["0", ".", "05"]
["0", ".", "000005"]

然后当数字序列被它们的数值考虑时,我们正在比较

[0, ".", 5]
[0, ".", 5]

它们是相等的,所以在比较它们时compare应该return0。 Firefox和Chrome就在这儿,IE和Edge就错了