对浮点数数组进行排序[重复]
Posted
技术标签:
【中文标题】对浮点数数组进行排序[重复]【英文标题】:Sorting array of float point numbers [duplicate] 【发布时间】:2013-09-01 01:23:08 【问题描述】:我有一个浮点数数组:
[ 82.11742562118049, 28.86823689842918, 49.61295450928224, 5.861613903793295 ]
在数组上运行 sort() 后,我得到了这个:
[ 28.86823689842918, 49.61295450928224, 5.861613903793295, 82.11742562118049 ]
请注意 5.8... 如何大于 javascript(Node)的 49.6...。这是为什么呢?
如何正确排序这些数字?
【问题讨论】:
使用arr.sort(function (a, b) return a-b; );
。就目前而言,这些值按字母顺序排序。 “2”在“4”之前,在“5”之前,在“8”之前(比较是每个数字的第一个“字母”......直到它们匹配,然后它比较下一个字母,所以开)
供参考:w3schools.com/jsref/jsref_sort.asp。默认情况下,javascript 的数组排序方法按字母顺序和升序排序。因此,为什么要传入@Ian 提供的排序方法
一般情况下,不要引用 w3 学校,因为它们可能在很多方面都不正确。
【参考方案1】:
传入一个排序函数:
[….].sort(function(a,b) return a - b;);
结果:
[5.861613903793295, 28.86823689842918, 49.61295450928224, 82.11742562118049]
From MDN:
如果未提供 compareFunction,则通过将元素转换为字符串并按字典(“字典”或“电话簿”,而不是数字)顺序比较字符串来对元素进行排序。
【讨论】:
括号不匹配。 @CrazyTrain - 感谢您的编辑。以为我在那里失明了:) 如果你喜欢这样的事情,这里有一个较短的版本:yourArray.sort( (a,b) => a-b )
【参考方案2】:
内置的 JS 排序功能将所有内容都视为字符串。尝试自己制作:
var numbers = new Array ( 82.11742562118049, 28.86823689842918, 49.61295450928224, 5.861613903793295 );
function sortFloat(a,b) return a - b;
numbers.sort(sortFloat);
【讨论】:
您应该改用数组字面量。[...]
,不是new Array(...)
以上是关于对浮点数数组进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章