Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带数字选项的Intl.Collator和natural sort使用十进制数字进行错误排序_Javascript_Ecmascript Intl - Fatal编程技术网

Javascript 带数字选项的Intl.Collator和natural sort使用十进制数字进行错误排序

Javascript 带数字选项的Intl.Collator和natural sort使用十进制数字进行错误排序,javascript,ecmascript-intl,Javascript,Ecmascript Intl,使用Intl.Collator和启用numeric选项对小数进行排序时,小数比较不正确 在某些浏览器上,比较“0.005”和“0.05”会返回“0”,因为数字是相同的 不同浏览器中的结果: 铬54=0 Firefox 49=0 边=-1 IE 11=-1 //返回0 console.log(新的Intl.Collator(未定义,{numeric:true})。比较(0.000005,0.05))正如AndréBargull在中观察到的那样,数字排序只考虑十进制数字序列,即Unicode数

使用
Intl.Collator
和启用
numeric
选项对小数进行排序时,小数比较不正确

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

不同浏览器中的结果:

  • 铬54=0
  • Firefox 49=0
  • 边=-1
  • IE 11=-1
//返回0

console.log(新的Intl.Collator(未定义,{numeric:true})。比较(0.000005,0.05))
正如AndréBargull在中观察到的那样,数字排序只考虑十进制数字序列,即Unicode数字类别中的数字序列的数值。也就是说,当比较两个包含小数和小数成分的相同字符串时,不考虑整个小数的数值——因为U+002E句号不在数字类别中(而是在标点符号类别中)

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

["0", ".", "05"]
["0", ".", "000005"]
然后,当数字序列被它们的数值考虑时,我们比较

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

它们相等,因此比较它们时,
compare
应返回0。Firefox和Chrome就在这里,IE和Edge搞错了。

我在Edge上得到了-1。谢谢@NinaScholz,我用我得到的不同结果更新了这个问题。