3
"" + 237498237498273908472390847239084710298374901823749081237409273492374098273904872398471298374
> '2.3749823749827392e+92'

私は美しく難解な方法でIDを計算します:

time = new Date().getTime()
pid = process.pid
host = 0; (host +=s.charCodeAt(0) for s in os.hostname())
counter = MIPS.unique_id()

"#{host}#{pid}#{time}#{counter}"

残念ながら、途中のどこかでID(たとえば11207648813339434616800)。残念ながら、これは彼らが時々に変わることを意味し1.1207648813339434e+22ます。

更新

これは、redisの「バグ/機能」のようです。決してそれを期待していませんでした。

# Bug with Big Numbers on zadd
redis = require 'redis'
r = redis.createClient()
r.zadd 'zset', '342490809809999998098', 'key', ->
    r.zscore 'zset', 'key', (_, results) ->
        console.log typeof results # string
        console.log results # 3.4249080981000002e+20
4

2 に答える 2

2

Javascript は、53 ビット精度の大きな数値を格納するために 8 バイトの double を使用します。あなたの場合、それは 53 ビットをはるかに超えているため、大きな数を正確に格納できる大きな数のライブラリを使用する必要があります。javascript-bignum を試す

于 2012-04-09T04:07:10.507 に答える
1

2.3749823749827392e+92数値を文字列と連結して変換する前に、数値が変換されます。

唯一の解決策は、文字列または配列のいずれかである任意の桁数を受け入れるコンテナ形式を使用することです。

この番号を取得する方法について、もう少し詳しく教えていただけますか?

于 2012-04-09T03:58:00.410 に答える