Форматирование поплавков в Python без лишних нулей
Как форматировать float, чтобы он не содержал нулевые остатки? Другими словами, я хочу, чтобы результирующая строка была как можно короче.?
17 ответов
Me, я бы сделал (‘%f’ % x).rstrip(‘0’).rstrip(‘.’) — гарантирует форматирование с фиксированной запятой, а не научную нотацию и т.д. и т.д. Да, не такой гладкий и элегантный, как %g , но он работает (и я не знаю как заставить %g никогда не использовать научную нотацию, -).
15,95 десятичных знаков — это предел для «двойной точности» (64 бита), для «одинарной точности» (32 бита) это
7,22 десятичных знака.
Вы можете использовать %g для достижения этой цели:
или, для Python 2.6 или выше:
Из docs для format : g вызывает (между прочим)
несущественные конечные нули [будут] удалены из значимости, а десятичная точка также удаляется, если после него не осталось оставшихся цифр.
10% больше времени, чем '<:2.5f>'.format(v) . Даже если это не так, я склонен использовать форму метода str потому что, когда мне нужно настроить его, добавить к нему дополнительные значения и т. Д., Есть меньше изменений. Конечно, с 3.6 у нас есть f-строки для большинства целей. 🙂
После просмотра ответов на несколько похожих вопросов это кажется лучшим решением для меня:
%g не избавляется от научной нотации.
15 десятичных знаков, похоже, избегают странного поведения и имеют большую точность для моих потребностей.
Я мог бы использовать format(inputValue, ‘.15f’). вместо ‘%.15f’ % inputValue , но это немного медленнее (
Я мог бы использовать Decimal(inputValue).normalize() , но в этом есть несколько проблем. Во-первых, он медленнее (
11x). Я также обнаружил, что, хотя он имеет довольно высокую точность, он по-прежнему страдает от потери точности при использовании normalize() .
Самое главное, что я все равно буду преобразовываться в Decimal из float , который может заставить вас получить что-то другое, кроме числа, которое вы там вложили. Я думаю, что Decimal работает лучше всего, когда арифметика остается в Decimal , а Decimal инициализируется строкой.
Я уверен, что проблема с точностью Decimal.normalize() может быть скорректирована с учетом настроек контекста, но, учитывая уже медленную скорость и не требующую смешной точности, и тот факт, что я все еще буду преобразовывать из float и во всяком случае, потеря точности, я не думал, что это стоит того, чтобы преследовать.
Меня не интересует возможный результат «-0», поскольку -0.0 является допустимым числом с плавающей запятой, и, вероятно, это будет редкое событие, но, поскольку вы упоминали, что хотите сохранить строковый результат короче возможно, вы всегда можете использовать дополнительные условные условия при очень низкой стоимости дополнительной скорости.
Как убрать незначащие нули в Python?
Чтобы убрать незначащие нули справа от дробной части числа в Python, можно использовать функцию format с шаблоном <:g>. Например:
Чтобы убрать незначащие нули справа и слева от дробной части числа, можно использовать функцию float.__trunc__ . Например:
Обратите внимание, что эти методы не убирают незначащие нули только у чисел с десятичной точкой. Если вы хотите убрать незначащие нули у целых чисел, можно использовать следующий код:
Как форматировать числа с плавающей запятой без завершающих нулей?
Дроби при преобразовании в десятичные часто приводят к строке цифр после запятой. Не является окончательным то, что количество цифр после десятичной точки остается небольшим. Эти цифры становятся неуместными, особенно когда они состоят исключительно из конечных нулей. В этой статье мы углубимся в нюансы удаления конечных нулей из значений с плавающей запятой, используя каждый из приведенных ниже методов.
Python предлагает четыре эффективных метода удаления конечных нулей из значений с плавающей запятой: функции to_integral() и normalize(), функции str() и rstrip(), цикл while и функция float(). Эти методы обеспечивают различные подходы к очистке ваших чисел с плавающей запятой и устранению ненужных конечных нулей.
- Используя to_интеграл() & нормализовать ( ) функции
- Используя ул() и rstrip() функции
- Используя пока петля
- Используя плавать( ) функция
Метод 1: Использование функций to_integral() и normalize()
Два инструмента лучше, чем один, что удваивает наши возможности в обработке конечных нулей. Это верно в том случае, когда мы пытаемся совместить две функции из десятичная дробь библиотека для удаления конечных нулей в данном вводе.
to_integral() используется для проверки того, благословлено ли данное входное число дробной частью или нет, в то время как нормализовать ( ) Функция используется для удаления конечных нулей без какой-либо дымки.
Нужно начать с импорта десятичная дробь библиотеку, как показано ниже.
Затем пришло время ввести входные данные, а затем определить пользовательскую функцию, чтобы объединить возможности to_интеграл() и нормализовать ( ) как показано ниже.
Наконец, давайте посмотрим на результат.
Объединение функций для удаления завершающих нулей
Вывод без завершающих нулей
Способ 2: удаление нулей с помощью функций str() и rstrip()
Это немного необычно, поскольку включает преобразование входного числа в строку, а затем удаление завершающих нулей с помощью оператора рстрип ( ) функция. Это может показаться нетрадиционным, но эффективно справляется со своей задачей!
Начнем с импорта десятичная дробь library с последующим объявлением ввода, как показано ниже.
Затем ввод преобразуется в строку с помощью ул( ) функция.
Преобразованный вывод передается через рстрип ( ) функция, в которой следует указать, что удаляемый объект равен нулю, поскольку значение по умолчанию — «пустое пространство».
Удаление завершающих нулей путем преобразования строки
Завершающие нули больше не
Способ 3: использование цикла while
Классический цикл while также может быть очень полезен для удаления конечных нулей, как показано ниже.
Цикл while для удаления завершающих нулей
Код предназначен для того, чтобы каждый конечный ноль удалялся один за другим в тот момент, когда ввод зацикливался на коде.
Конечные нули, пропущенные циклом while
Способ 4: упрощение с помощью функции float()
плавать( ) функция преобразует данный вход строго в число с плавающей запятой без пробелов для любых завершающих нулей. Это довольно простой метод удаления конечных нулей, если они есть в данном вводе.
Функция с плавающей запятой для удаления конечных нулей
Завершающие нули удалены
Заключение:
Теперь, когда мы подошли к концу этой статьи, мы надеемся, что эта статья предоставила четкое объяснение различных методов, которые можно использовать для удаления конечных нулей из чисел с плавающей запятой в Python. Вот еще одна статья, в которой подробно описано, как использовать форматирование содержимого MS Excel с помощью to_Excel и Стайлер функции в Python. В AskPython есть множество других приятных и не менее информативных статей, которые могут быть очень полезны тем, кто хочет повысить свой уровень в Python. Чтобы еще больше бросить себе вызов, можете ли вы придумать другие способы удаления конечных нулей из чисел с плавающей запятой?
КАК УБРАТЬ НЕЗНАЧАЩИЕ НУЛИ В PYTHON
В Python незначащие нули убираются при помощи метода rstrip() .
Этот метод удаляет пробельные символы (включая символ перевода строки) справа от строки.
number = «135.00\n»print(number.rstrip(«0»).rstrip(«.») if «.» in number else number)# вывод: 135
В данном примере мы убираем незначащие нули в конце числа и точку, если она также является незначащей.
Решение простых задач на python — Поменять порядок цифр числа на обратный
Пробелы И Отступы В Python — Синтаксис Python
Вся суть программирования на Python
Прокачиваем типизацию Python-функций: None, NoReturn, Never, assert_never
19 Обход всех цифр числа с помощью while Python
Удаление элементов списка по условию. Решение задачи на Python
Эти ошибки совершает каждый новичок Python / 11 Ошибок которые нужно исправить