36

私は浮動小数点数の配列を持っています:

[ 82.11742562118049, 28.86823689842918, 49.61295450928224, 5.861613903793295 ]

配列で sort() を実行すると、次のようになります。

[ 28.86823689842918, 49.61295450928224, 5.861613903793295, 82.11742562118049 ]

JavaScript (ノード) の場合、5.8... が 49.6... よりも大きいことに注意してください。何故ですか?

この数字を正しく並べ替えるにはどうすればよいですか?

4

2 に答える 2

52

並べ替え関数を渡します。

[….].sort(function(a,b) { return a - b;});

結果:

[5.861613903793295, 28.86823689842918, 49.61295450928224, 82.11742562118049] 

MDN から:

compareFunction が指定されていない場合、要素はそれらを文字列に変換し、文字列を辞書順 (数値ではなく「辞書」または「電話帳」) で比較することによってソートされます。

于 2013-08-28T19:49:52.447 に答える
3

組み込みの JS ソート関数は、すべてを文字列として扱います。自分で作ってみてください:

var numbers = new Array ( 82.11742562118049, 28.86823689842918, 49.61295450928224, 5.861613903793295 );

function sortFloat(a,b) { return a - b; }

numbers.sort(sortFloat);
于 2013-08-28T19:52:23.277 に答える