2012-04-09 25 views
3
"" + 237498237498273908472390847239084710298374901823749081237409273492374098273904872398471298374 
> '2.3749823749827392e+92' 

我计算在一个美丽和神秘的方式标识:的JavaScript - 转换长的数字串

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}" 

不幸的是,地方沿途的标识(例如11207648813339434616800)。不幸的是,这意味着他们有时会转向1.1207648813339434e+22

UPDATE

这似乎是Redis的一个 “错误/功能”。从来没有预料到。您连接的数量与之前的字符串转换

+0

您将无法存储该号码。你必须以某种方式计算你的唯一ID,使其低于19位数的精度(可能使用'%1000000000000000000')。 – Blender 2012-04-09 04:04:53

+0

你如何将这个传递给客户层? – 2012-04-09 04:04:56

+2

如果你在文档的某个地方写它,然后把它包装在一个Javascript字符串或JSON对象中。 – 2012-04-09 04:05:54

回答

1

您的号码被转换为2.3749823749827392e+92

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

你能提供一些关于你如何获得这个号码的更多细节吗?

+0

更新了这个问题。 – CamelCamelCamel 2012-04-09 03:59:21

2

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