2016-10-18 6 views
4

Intl.Collatorを使用して10進数をソートし、有効にするオプションnumericは小数点を誤って比較します。数値オプション付きIntl.Collat​​orと自然なソートは、小数点で正しくソートされません。

「0.005」と「0.05」を比較するブラウザによっては、数値が同じであるため「0」を返すものがあります。別のブラウザで

結果:

  • クローム54 = 0
  • のFirefox 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

+1

私は端に-1を取得します。 –

+0

ありがとう@NinaScholz、私は私が得る別の結果で質問を更新しました。 – Nisd

答えて

2

アンドレBargullがthe Firefox bug reportで観察すると、数値のソートはその数値によって、すなわち数のUnicodeのカテゴリにのみ 10進数のシーケンスを、と考えています。つまり、10進数を含む2つの別の同一の文字列を小数成分で比較すると、U + 002E FULL STOPがNumberカテゴリにないため、10進数全体が数値として考慮されません(代わりに句読点カテゴリー)。その後、

["0", ".", "05"] 
["0", ".", "000005"] 

とを数字配列はその数値によって考慮されています - 「0.05」と「0.000005」 - 私たちは効果的要素のこれらの配列を比較している我々は、これらの2つの文字列を比較するときそれでは

、値は、我々はそれらを比較するときに0を返す必要があります

等しい
[0, ".", 5] 
[0, ".", 5] 

などcompareを比較しています。 FirefoxとChromeはここにあり、IEとEdgeは誤解されています。

関連する問題