对浮点数数组进行排序[重复]

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(...)

以上是关于对浮点数数组进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python中浮点数的最小值

浮点数在c中的基数排序

Java:如何以相反的顺序对浮点数组进行排序?

float_浮点数存储结构

对具有负值和正值的整数和浮点数列表进行排序?

Numpy isnan() 在浮点数组上失败(来自 pandas 数据框应用)