使用对十进制数进行排序Intl.Collator
以及启用的选项numeric
比较小数不正确。
在某些浏览器上,比较“0.005”和“0.05”会返回“0”,因为数字相同。
不同浏览器中的结果:
- 铬 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 https://bugzilla.mozilla.org/show_bug.cgi?id=1312388
正如安德烈·巴古尔 (André Bargull) 在火狐错误报告 https://bugzilla.mozilla.org/show_bug.cgi?id=1312388,数字排序考虑only十进制数字序列,即在数字的 Unicode 类别中,按其数值。也就是说,当比较两个包含带小数部分的十进制数字的完全相同的字符串时,不会将整个十进制数字视为其数值 - 因为 U+002E 句号不在“数字”类别中(而是在“标点符号”中)类别)。
那么,当我们比较这两个字符串时——“0.05”和“0.000005”——我们实际上是在比较这些元素数组:
["0", ".", "05"]
["0", ".", "000005"]
然后当数字序列通过它们的数值来考虑时,我们正在比较
[0, ".", 5]
[0, ".", 5]
是相等的,所以compare
比较它们时应该返回 0。 Firefox 和 Chrome 就在这里,而 IE 和 Edge 是错误的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)