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 使用 8 字节双精度来存储大数,即 53 位精度。在你的情况下,它远远超过 53 位,所以你应该使用一个大数库,它可以精确地存储大数。试试javascript-bignum

于 2012-04-09T04:07:10.507 回答
1

2.3749823749827392e+92在将数字与字符串连接以进行转换之前,您的数字将被转换为。

唯一的解决方案是使用接受任意位数的容器格式,可以是字符串或数组。

您能否向我们提供更多关于您如何获得此号码的详细信息?

于 2012-04-09T03:58:00.410 回答