gpt4 book ai didi

javascript - Intl.Collat​​or 和带有数字选项的自然排序不正确地使用十进制数排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:13:14 29 4
gpt4 key购买 nike

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

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

不同浏览器的结果:

  • Chrome 54 = 0
  • 火狐 49 = 0
  • 边 = -1
  • IE 11 = -1

// 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 在比较它们时应该返回 0。 Firefox 和 Chrome 就在这儿,IE 和 Edge 错了。

关于javascript - Intl.Collat​​or 和带有数字选项的自然排序不正确地使用十进制数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40107588/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com