Voulez-vous jamais apporter un nombre à virgule flottante 64 bits créé en Python à JavaScript tel quel? Les deux sont IEEE-754 64 bits (signe 1 bit, pseudonyme 52 bits, exposant 11 bits).
J'aurais aimé pouvoir le transmettre tel quel, mais je ne suis pas content que si je le vide et le mette en décimal, il sera arrondi.
Cette entrée détaille comment passer un nombre à virgule flottante tel quel, sans erreur.
En réalité, JavaScript est défini par la spécification ECMAScript, et Python est le même que C double, de sorte qu'il a le même format dans la plupart des environnements OS existants.
float64 est un tableau d'octets utilisant struct.pack, puis une chaîne hexadécimale au format. Il est émis dans l'ordre des octets du réseau.
dump.py
>>> import numpy as np
>>> import struct
>>> import binascii
>>> a = np.float64(10.12345456)
>>> binascii.hexlify(struct.pack("!d", a))
'40243f356fa37bf1'
Bien qu'il soit un peu différent de cette explication, vous pouvez également le restaurer comme suit.
load.py
>>> b = struct.unpack('!d', binascii.unhexlify('40243f356fa37bf1'))[0]
>>> a == b
True
Utilisez le TypedArray familier
> 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
Oui. J'ai pu le lire. Je l'ai essayé avec Python 3.4 sur Mac OS X 10.9 et node.js 0.12.2.
Recommended Posts