Я читаю большой файл ascii, преобразовывая его в двоичный файл и сжимая его, чтобы уменьшить размер файла. Я хотел бы точно воспроизвести исходный файл. Однако форматирование номера является проблемой. Я считаю, что исходный файл печатается с минимальным количеством символов, необходимых для однозначной идентификации числа с плавающей запятой.Минимальные символы форматирования символов для Python
import struct
x = [3.14, 3.1]
y = list(struct.unpack('2f', struct.pack('2f', *x)))
print str(x)
print str(y)
Который возвращает [3.14, 3.1] [3.140000104904175, +3,0999999046325684]
Я хотел бы напечатать у так же, как х. Как я могу это сделать? Кроме того, я не понимаю, что происходит под капотом с функцией str. Не могли бы вы объяснить? Я использую Python 2.7.
Update:
import struct
x = [3.14, 3.1]
y = list(struct.unpack('2d', struct.pack('2d', *x)))
print str(x)
print str(y)
Код выше возвращений:
[3.14, 3.1]
[3.14, 3.1]
Так функция ул обрезает символы, но только тогда, когда значение очень близко к к 64-битового значения с плавающей точкой. Я хотел бы, чтобы подобное поведение было когда значение очень близко к 32-битовому значению с плавающей запятой.
Yours является [дубликатом вопрос] (http://stackoverflow.com/questions/26689004/format-a-float-to-a-string-with-minimum- characters-in-python), я предлагаю удалить старый вопрос или, лучше, удалить его и изменить предыдущий. – gboffi