L'emballage et le Déballage binaire flotteur en python

Je vais avoir quelques problèmes avec l'emballage et le déballage de binaire flotteurs en python quand vous faites un fichier binaire en écriture. Voici ce que j'ai fait:

import struct

f = open('file.bin', 'wb')
value = 1.23456
data = struct.pack('f',value)
f.write(data)
f.close()

f = open('file.bin', 'rb')
print struct.unpack('f',f.read(4))
f.close()

Le résultat que j'obtiens est le suivant:

(1.2345600128173828,)

Ce qui se passe avec les chiffres supplémentaires? Est-ce une erreur d'arrondi? Comment cela fonctionne?

Oui, les nombres à virgule flottante sont, de par leur nature, sont imprécis.
Pour le pourquoi, voir Ce que Tout informaticien Devez Savoir à Propos de l'Arithmétique à virgule Flottante.
Le tutoriel Python résume la représentation des problèmes que vous avez rencontré.
Si vous voulez éviter de perdre de précision, vous pouvez pickle Décimal à la place.

OriginalL'auteur Wilsonator | 2013-04-23