LINUX.ORG.RU

тебе уже сказали - телепатов нет, чтобы получить нужный формат, необходимо указать его. дефолтный метод __str__() по какому то алгоритму сам выбирает когда использовать обычную запись, когда экспоненциальную

eternal_sorrow ★★★★★ ()
Ответ на: комментарий от eternal_sorrow

Но это еще фигня, потому что чтобы отправить мне этот float в виде str для rest запроса, надо сначала через жопу посчитать количество цифр в оригинальном числе, а потом в «{0:.8f}» засунуть переменную. Офигенно я скажу.

steemandlinux ★★★★★ ()
Последнее исправление: steemandlinux (всего исправлений: 1)
Ответ на: комментарий от eternal_sorrow

Ну если в требованиях str с определенной точностью, то что я должен делать так? Ну не может быть это число выше определенной точности.

steemandlinux ★★★★★ ()
Последнее исправление: steemandlinux (всего исправлений: 1)
Ответ на: комментарий от steemandlinux

Ну если в требованиях str с определенной точностью, то что я должен делать так? Ну не может быть это число выше определенной точности.

Объясни что именно мешает тебе перевести в строку с заданной точностью.

mironov_ivan ★★★★★ ()

Наоборот, удобно. До момента, когда становится трудно на глаз определить количество ноликов (0.00001), str() возвращает запись с десятичной точкой. Меньше число - уже удобней экспонента.

anonymous ()
Ответ на: комментарий от steemandlinux

Нужно считать цифру, потому что точность в разных ситуациях разная.

Какую цифру? Требуемое количество знаков после запятой? Так тебе, похоже, в любом случае это как-то считать и куда-то задавать придётся, раз уж сам сказал, что она может быть разной в разных ситуациях.

mironov_ivan ★★★★★ ()
Ответ на: комментарий от mironov_ivan

Вот в том и проблема, что я не могу использовать:

precision = len(str(0.00000067).split('.')[1])

А потом str(round(0.00000067*5.78, precision))

Мне приходится трахаться с комментариями, чтобы сделать формат и грузить лишнюю функцию.

steemandlinux ★★★★★ ()
Ответ на: комментарий от steemandlinux

Ну попробуй:

Есть оригинальное число:

0.00000067

8 цифр после запятой.

Твои проблемы начинаются уже тут. «0.00000067» не имеет точного представления в виде двоичного числа с плавающей точкой.

>>> i = 0.00000067
>>> '%.10f' % i
'0.0000006700'
>>> '%.20f' % i
'0.00000067000000000000'
>>> '%.40f' % i
'0.0000006700000000000000437966178080950730'
>>> '%.80f' % i
'0.00000067000000000000004379661780809507298783955775434151291847229003906250000000'

=)

Я бы просто всегда при преобразовании float -> str делал это с максимальным разумным количеством знаков после запятой. И не пытался применить тут какую-либо странную магию.

mironov_ivan ★★★★★ ()
Ответ на: комментарий от steemandlinux

0.03 тоже нельзя представить в виде двоичного floating point.

Вообще, если у тебя связанные с деньгами вычисления, то их числами с плавающей точкой никогда не делают.

mironov_ivan ★★★★★ ()
Ответ на: комментарий от steemandlinux

мне этот float в виде str для rest запроса,

А в каком формате у тебя тело запроса? JSON вполне понимает экспоненциальную нотацию.

In [1]: import json

In [2]: json.dumps({'foo': 0.000000000001})
Out[2]: '{"foo": 1e-12}'
provaton ★★★★★ ()

Но на кой черт
Вот очень мне вставляет дроч вида: «{0:.8f}».format

Это пистон, детка, здесь всё сделано через ж-пу,
привыкай или переходи в Ruby.

Novator ★★★★ ()
Ответ на: комментарий от Novator

если вам нужна строка «0.000000000001» — храните в памяти строку и не будет проблем если вам нужно дробное число — узнайте, как такие числа обрабатывает ЕВМ и не задавайте глупых вопросов если вам нужно разменять $0.03 — храните в памяти 3 цента числом 3 как делает весь белый мир

краткая лекция для упорышей окончена, всем спасибо за внимание

anonymous ()
Ответ на: комментарий от steemandlinux

len(str(0.00000067).split('.')[1])

split('.')

Напомнило php-шный код который пришлось дебажить однажды. Там человек делимость числа на 7 проверял как «есть ли запятая в строке str(x/7)». И долго удивлялся почему у него вёрстка календаря в таблицу съезжает при переезде на другой хостинг. С другой дефолтной локалью.

alpha ★★★★★ ()
Ответ на: комментарий от steemandlinux

precision = len(str(0.00000067).split(‘.’)[1])

Есть короче бизнес идея. Когда заработает наконец космический туризм, запустить тв-шоу: выбирается программист, ему полностью оплачивают билет и ещё добавляют сверху, но он должен сам запрограммировать автопилот и систему жизнеобеспечения корабля на котором полетит. Я бы с удовольствием вложился чтобы отправить тебя и посмотреть на это.

slovazap ★★★★★ ()