JavaScript - 将长数字转换为字符串

时间:2012-04-09 03:55:48

标签: javascript jquery coffeescript

"" + 237498237498273908472390847239084710298374901823749081237409273492374098273904872398471298374
> '2.3749823749827392e+92'

我以美丽而神秘的方式计算身份证:

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 / feature”。从来没有想到过。

# 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

2 个答案:

答案 0 :(得分:2)

Javascript使用8字节双倍来存储大数字,这是53位精度。在你的情况下,它远远超过53位,所以你应该使用一个大数字库,它可以精确地存储大数字。试试javascript-bignum

答案 1 :(得分:1)

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

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

您能否向我们提供一些有关如何获得此号码的详细信息?