Möchten Sie jemals eine in Python erstellte 64-Bit-Gleitkommazahl so wie sie ist in JavaScript integrieren? Beide sind IEEE-754 64-Bit (Vorzeichen 1 Bit, Pseudonym 52 Bit, Exponent 11 Bit).
Ich wünschte, ich könnte es so weitergeben, wie es ist, aber ich bin nicht glücklich, dass es gerundet wird, wenn ich es ablege und dezimal lösche.
Dieser Eintrag beschreibt, wie eine Gleitkommazahl unverändert ohne Fehler übergeben wird.
In der Realität wird JavaScript durch die ECMAScript-Spezifikation definiert, und Python ist dasselbe wie C double, sodass es in den meisten vorhandenen Betriebssystemumgebungen dasselbe Format hat.
float64 ist ein Byte-Array, das struct.pack und dann eine hexadezimale Zeichenfolge im Format verwendet. Es wird in der Reihenfolge der Netzwerkbytes ausgegeben.
dump.py
>>> import numpy as np
>>> import struct
>>> import binascii
>>> a = np.float64(10.12345456)
>>> binascii.hexlify(struct.pack("!d", a))
'40243f356fa37bf1'
Obwohl es sich ein wenig von dieser Erklärung unterscheidet, können Sie es auch wie folgt wiederherstellen.
load.py
>>> b = struct.unpack('!d', binascii.unhexlify('40243f356fa37bf1'))[0]
>>> a == b
True
Verwenden Sie das bekannte TypedArray
> a = new ArrayBuffer(8)
> b = new Float64Array(a)
> c = new Uint32Array(a)
> d = '40243f356fa37bf1'
> c[0] = parseInt(d.slice(8, 16), 16)
> c[1] = parseInt(d.slice(0, 8), 16)
> b[0]
10.12345456
Ja. Ich konnte es lesen. Ich habe es mit Python 3.4 unter Mac OS X 10.9 und node.js 0.12.2 versucht.
Recommended Posts