みちのいに!!

自分のメモと、他にもハマる人がいそうなことを書く

JavaScriptで手っ取り早く64bit符号なし整数文字列の大小関係を比較

JavaScriptが53bitまでしか整数をまともに扱えないのはよく知られた話です.

JavaScriptの整数の精度が保たれるのは9007199254740991まで - Qiita

Twitterからのレスポンスは

id_str:'12345678765543212345'

のように文字列でJSONが降ってきます.

これをそのまま大小関係を比較するのはよくありません.

javascript 文字列のまま数字を比較すると危険が危ない。 - かもメモに詳しいように

'99'<'100' // false

となります.

しかし64bit整数は数値に変換しても不正確になるジレンマがあります.

そこで,

// ES5版
const pad0 = function(num){return ('00000000000000000000'+num).slice(-20)}
// ES6版
const pad0 = num => ('0'.repeat(21)+num).slice(-20)

pad0('99')<pad0('100') // true

という強引な解決策を提案します

'99'>'100'となる理由は桁が揃ってないから起こるのであり,桁を揃えてしまえばいいのです.