Python количество символов после символа

Фиксированное количество знаков после запятой в Python

Есть ли в python аналог функции toFixed() в JS? Мне нужно что-то вроде этого:

>>> a = 12.3456789 >>> a.toFixed(2) '12.35' >>> a.toFixed(0) '12' >>> b = 12.000001 >>> b.toFixed(3) '12.000' 

Ответы (7 шт):

Вот так можно указать количество знаков после запятой при выводе:

a = [1000, 2.4, 2.23456754323456, 2754.344] for i in a: print('%.3f' % i) # 3 знака после запятой 
1000.000 2.400 2.235 2754.344 

Прямого аналога нет. Можно попробовать

>>> x = 3.1234567 >>> x = float(''.format(x)) >>> x 3.123 
def toFixed(f: float, n=0): a, b = str(f).split('.') return '<>.<><>'.format(a, b[:n], '0'*(n-len(b))) f = 7.123 print(toFixed(f, 10)) # 7.1230000000 print(toFixed(f, 2)) # 7.12 
def toFixed(numObj, digits=0): return f"f>" 
>>> numObj = 12345.6789 >>> toFixed(numObj) '12346' >>> toFixed(numObj, 1) '12345.7' >>> toFixed(numObj, 6) '12345.678900' >>> toFixed(1.23e+20, 2) '123000000000000000000.00' >>> toFixed(1.23e-10, 2) '0.00' >>> toFixed(2.34, 1) '2.3' >>> toFixed(2.35, 1) '2.4' >>> toFixed(-2.34, 1) '-2.3' 

Я для этого использую встроенный модуль. Понятно, что он возвращает Decimal, но я потом обратно преобразую во float.

from decimal import Decimal number = Decimal('0.424242') number = number.quantize(Decimal('1.000')) number = float(number) # возвращает true, т.к. оба типа данных теперь float print( 0.424 == number ) 

Мне кажется что вы слегка усложняете. Есть чудесная функция round(), в которую в можете передать число, а через запятую передать количество знаков после. Так как всё равно там будет округление

Читайте также:  Html css javascript classes

если нужно не округлить, а именно обрезать знаки после запятой n = float(input())

a=input() print(float(a[:5])) #если заранее известно количество знаков

Источник

Форматирование чисел в Python

Форматирование строк на самом деле является удивительно большой темой, и у Python есть собственный внутренний мини-язык для обработки множества доступных нам параметров форматирования. В этой статье мы разберем только форматирование чисел. Вы узнаете, как вывести число с нужным количеством знаков после запятой и с разбивкой по три цифры.

Форматирование чисел с округлением

Сначала давайте рассмотрим форматирование чисел с плавающей запятой до заданного уровня округления. Есть два способа сделать это: можно указать нужное количество значащих цифр в целом или количество значащих цифр после десятичной точки. Начнем с первого.

Чтобы указать уровень точности округления, нам нужно использовать двоеточие (:), за которым следует десятичная точка, а также некоторое целое число, представляющее степень точности (количество знаков после запятой). При использовании f-строки мы помещаем всё это после значения, которое хотим отформатировать (в фигурных скобках) . Вместо этого также можно использовать метод format.

x = 4863.4343091 # пример числа с плавающей запятой print(f"") # использование f-строки print("".format(x)) # использование метода format

В обоих случаях мы получаем одинаковый результат: 4863.43.

Как видите, наше довольно длинное число сократилось до шести цифр. Также следует отметить, что данная операция форматирования может производить еще и округление. Если, например, первоначальное число будет иметь значение 4863.435, то выведем в консоль мы 4863.44. Здесь используется округление до ближайшего четного числа (в английском языке banker’s rounding — «округление банкира»).

Если мы укажем меньше цифр, чем у нас есть в целочисленной части нашего числа с плавающей запятой, то получим экспоненциальное представление:

x = 4863.4343091 print(f"") # 4.86e+03

4.86e+03 означает 4,86 ​​x 10³, или 4,86 ​​x 1000, что равно 4860. Глядя на этот результат, мы видим, что получили три значащих цифры, как и хотели.

Итак, а как нам указать три десятичных знака после запятой? Для этого нужно просто добавить f .

x = 4863.4343091 print(f"") # 4863.434

f в данном случае указывает, что наше число типа float должно отображаться как «число с фиксированной точкой». То есть нам нужно определенное количество десятичных знаков. Мы также можем использовать f без числа, что по умолчанию означает точность 6 цифр после точки:

x = 4863.4343091 print(f"") # 4863.434309

Вывод числа с разбивкой на разряды

Большие числа зачастую удобно писать с использованием символов-разделителей (обычно это запятые, пробелы или точки). Это улучшает их восприятие при чтении. В Python мы можем указать, каким символом разбить цифры числа на классы, указав нужный символ после двоеточия:

x = 1000000 print(f"") # 1,000,000 print(f"") # 1_000_000

При форматировании чисел с плавающей запятой и форматировании с округлением это тоже работает:

x = 4863.4343091 print(f"") # 4,863.434 print(f"") # 4_863.434

Вывод числа в процентах

Мы можем вывести число в качестве процентного значения, просто добавив символ % в конце параметров форматирования вместо f :

questions = 30 correct_answers = 23 print(f"You got correct!") # You got 76.67% correct!

При форматировании числа в процентах точность округления всегда относится к количеству цифр после точки.

Заключение

Вот и все! Мы разобрали самые ходовые способы вывода чисел в нужном формате. Теперь вы знаете, как ограничить количество цифр в выводимом числе, количество знаков в дробной части числа, как вывести число в удобном для чтения виде и в виде процентного значения.

1 комментарий к “Форматирование чисел в Python”

Источник

Строковый оператор форматирования

Основы

Не смотря на один из принципов Python, гласящий: «Должен существовать один — и, желательно, только один – очевидный способ сделать что-то», в нашем любимом языке есть аж четыре способа отформатировать строку. Так сложилось исторически.
Это первый урок цикла, посвящённого форматированию строк. В него входят:

В данном уроке мы познакомимся со строковым оператором форматирования.

А какие бывают?

Сперва, в Пайтоне был строковый оператор форматирования, который имитировал функцию printf из языка C, на котором, как известно, написан сам Питон. Затем, в версии Пайтона 3.0 появился строковый метод format(), обладающий более широким и гибким синтаксисом. Но этот способ оказался самым медленным. Позже, в версии 3.6 были созданы f-Строки (PEP 498). Главная их задача — встраивать выражения в строковые литералы с использованием минимального синтаксиса. Скорость же здесь на высоте. Кроме того, в стандартной библиотеке, в модуле string есть класс Template, реализующий более простой способ форматирования строк. Если взять за 100% продолжительность работы самого медленного способа (метод format()), то получится примерно следующее распределение скоростей:

Синтаксис

Строки в Python содержат уникальную встроенную операцию, доступ к которой можно получить через оператор %. Оператор % по отношению к строкам выполняет операцию форматирования и вставки таким образом, что объект, стоящий справа от него, встраивается согласно определенным правилам в строку слева от него. Если вы когда-либо работали с функцией printf в С, вы сразу узнаете, как это работает. Вот простой пример:

print('2 * 2 = %s' % (2 * 2)) # Вывод: 2 * 2 = 4
print('2 * 2 = %s' % 2 * 2) # Вывод: 2 * 2 = 22 * 2 = 2

Как уже говорилось выше, данный способ форматирования пришёл в Питон из языка C, а именно, является прямым заимствованием функции printf(). Конечно, сейчас уже есть более удобные и быстрые методы форматирования, однако в некоторых ситуациях использование оператора % может быть удобнее, чем использование строкового метода format(). Кроме того, полезно знать об этом способе при чтении старых программ.
Важно понимать, что форматируются сами строки, а не вывод, как в случае с функцией print(). На вывод передается уже сформированная строка.

Задаём точность чисел с дробной частью

Оператор деления / возвращает вещественное число. Если количество знаков бесконечно, то Python выведет его в таком виде:

print('5 / 3 =', 5 / 3) # Вывод: 5 / 3 = 1.6666666666666667

Обычно требуется лишь определенное количество знаков. Для этого в строку записывают комбинацию символов, начинающуюся с %. Число после точки обозначает количество знаков после запятой. Символ f обозначает вещественный тип данных float.

print('4 / 7 =', 4 / 7) print("%.3f" % (4 / 7)) # Вывод: 4 / 7 = 0.5714285714285714 0.571
print("%.3f" % 4 / 7) # Вывод: Traceback (most recent call last): File "C:\Users\ivand\AppData\Roaming\JetBrains\PyCharm2021.2\scratches\scratch.py", line 1, in print("%.3f" % 4 / 7) TypeError: unsupported operand type(s) for /: 'str' and 'int' Process finished with exit code 1
print('Округляем 0.000005:', "%.5f" % (0.000005)) print('Округляем 0.000004:', "%.5f" % (0.000004)) # Вывод: Округляем 0.000005: 0.00001 Округляем 0.000004: 0.00000

Вывод символа по номеру

from random import randint [print("%c" % randint(0, 9999), end=' ') for _ in range(10)] # Вывод: ऍ ⍥ ನ ᇎ ᠏ ᖹ ڹ ⍠ එ

Вывод целочисленных значений

Если вместо символа ‘c’ использовать ‘d’, будет вставлено само целое число:

from random import randint [print("%d" % randint(0, 9999), end=' ') for _ in range(10)] # Вывод: 4113 1363 4474 1265 6116 6726 273 6761 2074 9782

Вставка в строку значений через ключ словаря

print('%(15)s, %(второй).5f' % ) # Вывод: ХХ, 0.46009

Вывод данных в поля заданной ширины

Бывает данные на экран надо вывести не через один пробел, а в виде таблицы. Другими словами, в полях определенной ширина, где ширина измеряется в знакоместах.
Рассмотрим пример. Допустим надо вывести числа второй строки под числами первой. Если выполнить функцию print() так:

print(10, 235) print(1000, 50) # Вывод: 10 235 1000 50
print("%5d%7d" % (10, 235)) print("%5d%7d" % (1000, 50)) # Вывод: 10 235 1000 50

Здесь в кавычках указаны форматы данных и ширина полей. После знака % за кавычками указаны данные, которые будут подставлены вместо каждого указанного формата. Если количество форматов не совпадает с количеством данных, возникнет ошибка.
Форматы данных могут быть: d — целое число, s — строка, f — вещественное число, c — символ.
По умолчанию данные выравниваются по правому краю поля. Чтобы выровнять их по левому, достаточно поставить знак минус перед числом, обозначающим ширину поля. Пример:

print("%-5d%7d" % (10, 235)) print("%-5d%7d" % (1000, 50)) # Вывод: 10 235 1000 50

Список модификаторов формата

Флаг Значение
‘#’ Для преобразования стоимости будет использоваться «альтернативная форма» (как определено ниже).
‘0’ Преобразование будет дополнено нулями для числовых значений.
‘-‘ Преобразованное значение остается скорректированным (отменяет ‘0’ преобразование, если указаны оба значения).
‘ ‘ (пробел) Перед положительным числом (или пустой строкой), полученным в результате преобразования со знаком, следует оставить пробел.
‘+’ Знак ( ‘+’или ‘-‘) будет предшествовать преобразованию (отменяет флаг «пробел»).
Преобразование Значение
‘d’ Знаковое целое десятичное число.
‘i’ Знаковое целое десятичное число.
‘o’ Знаковое восьмеричное число.
‘u’ Устаревший тип — идентичен ‘d’.
‘x’ Знаковое шестнадцатеричное (строчные).
‘X’ Знаковое шестнадцатеричное (прописное).
‘e’ Экспоненциальный формат с плавающей запятой (нижний регистр).
‘E’ Экспоненциальный формат с плавающей точкой (верхний регистр).
‘f’ Десятичный формат с плавающей запятой.
‘F’ Десятичный формат с плавающей запятой.
‘g’ Формат с плавающей запятой. Использует экспоненциальный формат в нижнем регистре, если показатель меньше -4 или не меньше точности, в противном случае — десятичный формат.
‘G’ Формат с плавающей запятой. Использует экспоненциальный формат в верхнем регистре, если показатель меньше -4 или не меньше точности, в противном случае — десятичный формат.
‘c’ Одиночный символ (принимает целочисленную или односимвольную строку).
‘r’ String (преобразует любой объект Python с помощью repr()).
‘s’ String (преобразует любой объект Python с помощью str()).
‘a’ String (преобразует любой объект Python с помощью ascii()).
‘%’ Никакой аргумент не преобразуется, в результате появляется ‘%’ символ.

Источник

Оцените статью