Nis*_*isd 6 javascript ecmascript-intl
Intl.Collator使用和 启用选项对十进制数字进行排序numeric会错误地比较小数。
在某些浏览器上,比较“0.005”和“0.05”会返回“0”,因为数字相同。
不同浏览器中的结果:
// Returns 0
console.log(new Intl.Collator(undefined, { numeric: true}).compare(0.000005, 0.05))Run Code Online (Sandbox Code Playgroud)
谁能告诉我出了什么问题吗?
报告为 Firefox 中的错误:https://bugzilla.mozilla.org/show_bug.cgi ?id=1312388
正如 Andr\xc3\xa9 Bargull 在Firefox 错误报告中观察到的那样,数字排序仅考虑十进制数字序列,即在 Number 的 Unicode 类别中,按其数值。也就是说,当比较两个包含带小数部分的十进制数字的完全相同的字符串时,不会将整个十进制数字视为其数值 - 因为 U+002E 句号不在“数字”类别中(它“ s 而不是标点符号类别)。
\n\n那么,当我们比较这两个字符串时——“0.05”和“0.000005”——我们实际上是在比较这些元素数组:
\n\n["0", ".", "05"]\n["0", ".", "000005"]\nRun Code Online (Sandbox Code Playgroud)\n\n然后当数字序列通过它们的数值来考虑时,我们正在比较
\n\n[0, ".", 5]\n[0, ".", 5]\nRun Code Online (Sandbox Code Playgroud)\n\n它们相等,因此compare比较它们时应返回 0。Firefox 和 Chrome 就在这里,而 IE 和 Edge 是错误的。
| 归档时间: |
|
| 查看次数: |
2771 次 |
| 最近记录: |