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

ich berechnen IDs in einer schönen und geheimnisvollen Art und Weise:JavaScript - Konvertieren Lange Nummer String

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

Leider irgendwo auf dem Weg der IDs (zB 11207648813339434616800). Leider bedeutet dies, dass sie sich manchmal an 1.1207648813339434e+22 wenden.

UPDATE:

Es scheint ein "Bug/Feature" von redis zu sein. hätte das nie erwartet.

+0

Sie können die Nummer nicht speichern. Sie müssen Ihre eindeutige ID irgendwie so berechnen, dass sie unter 19 Stellen der Genauigkeit liegt (vielleicht mit '% 100000000000000000000'). – Blender

+0

Wie leiten Sie dies an die Client-Ebene weiter? –

+2

Wenn Sie es irgendwo im Dokument schreiben, dann wickeln Sie es einfach in eine Javascript-Zeichenfolge oder ein JSON-Objekt ein. –

Antwort

1

Ihre Nummer wird auf 2.3749823749827392e+92 konvertiert, bevor Sie die Nummer mit der Zeichenfolge verketten es zu konvertieren.

Die einzige Lösung besteht darin, ein Containerformat zu verwenden, das eine beliebige Anzahl von Ziffern akzeptiert, die entweder eine Zeichenfolge oder ein Array sind.

Können Sie uns ein paar weitere Details geben, wie Sie diese Nummer erhalten?

+0

die Frage aktualisiert. – CamelCamelCamel

2

Javascript verwenden Sie 8-Byte-Double, um große Zahlen zu speichern, die 53-Bit-Genauigkeit ist. In Ihrem Fall ist es weit mehr als 53 Bits, also sollten Sie eine große Zahl Bibliothek verwenden, die große Zahlen genau speichern kann. Versuchen Sie javascript-bignum