Я поддерживаю Python script, который использует xlrd
для извлечения значений из электронных таблиц Excel, а затем выполняет различные действия с ними. Некоторые ячейки в электронной таблице являются высокоточными числами, и они должны оставаться таковыми. При извлечении значений одной из этих ячеек xlrd
дает мне float
, например 0,38288746115497402.
Однако мне нужно получить это значение в строке позже в коде. Выполнение str(value)
или unicode(value)
приведет к возврату примерно как "0.382887461155". Требования говорят, что это неприемлемо; точность должна быть сохранена.
Я пробовал пару вещей до сих пор без успеха. Первый использовал форматирование строк:
data = "%.40s" % (value)
data2 = "%.40r" % (value)
Но оба производят одинаковое округленное число, "0.382887461155".
При поиске людей с аналогичными проблемами на SO и в других местах в Интернете было предложено использовать класс Decimal
. Но я не могу изменить способ передачи данных мне (если кто-то не знает секретного способа сделать xlrd
return Decimals). И когда я пытаюсь это сделать:
data = Decimal(value)
Я получаю a TypeError: Cannot convert float to Decimal. First convert the float to a string.
Но, очевидно, я не могу преобразовать его в строку, иначе я потеряю точность.
Так что да, я открыт для любых предложений - даже очень грубых/взломанных, если это необходимо. Я не очень опытен с Python (больше сам парень из Java/С#), поэтому не стесняйтесь исправлять меня, если у меня есть какое-то фундаментальное недоразумение здесь.
EDIT: Просто подумал, что добавлю, что я использую Python 2.6.4. Я не думаю, что есть какие-то формальные требования, мешающие мне менять версии; он просто не должен испортить любой другой код.