Как сделать ограниченное количество знаков после запятой у вещественного числа — БЕЗ округления
если ответ был полезным, его можно отметить плюсом (нажать треугольник вверх слева от вопроса). Если ответ полностью решил задачу — принять ответ (нажать на галку под треугольниками слева).
12 мая 2022 в 6:55
4 ответа 4
Сортировка: Сброс на вариант по умолчанию
import math x = float(input('x: ')) print (f'Число x: s" % (x)>')
Отслеживать
ответ дан 8 мая 2022 в 11:03
35.5k 3 3 золотых знака 28 28 серебряных знаков 63 63 бронзовых знака
+1, только str напрягает. Там какое-то табу в вопросе на неё:-) Я сразу её предлагал — отклонили.
8 мая 2022 в 11:12
ну тут оно не влияет на само число, только для подсчета порядка
8 мая 2022 в 11:15
Можно так. Грубовато, но задачу выполняет — откидываем остаток через // .
x = float(input('x: '))*1000//1/1000 print (f'Число x: ')
Отслеживать
ответ дан 8 мая 2022 в 10:44
4,935 6 6 золотых знаков 12 12 серебряных знаков 29 29 бронзовых знаков
я где-то видел что есть такая команда для принта, которая как раз выполняет задачу. Не могу её найти, вы не слышали про такую?
8 мая 2022 в 10:50
Вообще никогда не интересовался форматированием вывода. Вы бы формулировали запрос тогда по-другому изначально — типа «нужен формат команды print», если это не вариант 🙂
8 мая 2022 в 10:52
ваш вариант работает, спасибо большое. Просто интересно найти именно то самое))
8 мая 2022 в 10:53
Скорее всего, нет такого вывода. Он просто не нужен. Так как чаще используют вывод через строку, просто отрезая ненужные знаки. Раз вам число нужно — дал второй вариант. Если ответ был полезным, его можно отметить плюсом (нажать треугольник вверх слева от вопроса). Если ответ полностью решил задачу — можно принять ответ (нажать на галку под треугольниками слева).
8 мая 2022 в 10:57
/1000 возможно может вызвать .999999999999999999999 в некоторых случаях
8 мая 2022 в 11:04
Можно просто срез по строке взять
>>> x = float(input('x: ')) x: 3.777777777 >>> print(f'Число x: ') Число x: 3.777
То есть 5 , это длина строки с учетом целой части, дробной и самого знака точки. Утверждение: «После запятой. » в этом случае не работает.
Как работать «после запятой»
Есть предложение округлить в нормальном виде и забрать всю последовательность знаков, отсекая последний
>>> x = float(input('x: ')) x: 3.777777777 >>> str(round(x, 4))[:-1] '3.777'
То есть: нам нужны три знака после запятой ⇒ округляем до 4 и забираем строку до предпоследнего
В данном случае вылезет не желательное поведение, если в четвертом знаке будет 0, обрежется нужное значение. Предлагаю воспользоваться функцией, чтобы исключить это поведение
def floor_float(variable: float, precision: int) -> str : decimal_part = str(variable).split(".")[1] if len(decimal_part)
>>> floor_float(3.77777, 4) '3.7777' >>> floor_float(3.777, 4) '3.777' >>> floor_float(3.777000000, 4) '3.777' >>> floor_float(3.77707, 4) '3.7770'
Как убрать числа после запятой в Python? Лучшие способы для удаления десятичной части числа
В Python, чтобы убрать числа после запятой, можно использовать функцию `int()` для преобразования числа в целое число. Например, если у вас есть число 3.14 и вы хотите получить только целую часть, вы можете использовать следующий код:
num = 3.14 integer_part = int(num) print(integer_part) # Выводит: 3
Если же вы хотите округлить число до целого значения, вы можете использовать функцию `round()`:
num = 3.14 rounded_num = round(num) print(rounded_num) # Выводит: 3
Если вам нужно сделать это для всех чисел в списке, вы можете использовать списковое включение:
numbers = [3.14, 2.718, 1.618] integer_parts = [int(num) for num in numbers] print(integer_parts) # Выводит: [3, 2, 1]
Вот несколько примеров методов, которые вы можете использовать для удаления десятичных частей чисел в Python. Попробуйте их и выберите тот, который лучше всего соответствует вашим потребностям.
Детальный ответ
Python: Как убрать числа после запятой
В Python, есть несколько способов убрать цифры после запятой. В этой статье, мы рассмотрим несколько методов, чтобы вы могли выбрать тот, который подходит вам лучше всего.
1. Использование функции round()
Функция round() используется для округления чисел до заданного количества десятичных знаков или до целого числа. Если вам нужно убрать цифры после запятой, вы можете использовать эту функцию, установив количество десятичных знаков равным 0:
number = 3.14159 rounded_number = round(number) print(rounded_number) # Вывод: 3
В приведенном выше примере, значение переменной number округляется до целого числа и сохраняется в переменной rounded_number.
2. Использование функции int()
Функция int() преобразует число в целое число, удаляя все цифры после запятой:
number = 3.14159 integer_number = int(number) print(integer_number) # Вывод: 3
В этом примере, функция int() преобразует значение переменной number в целое число и сохраняет результат в переменной integer_number.
3. Использование форматирования строк
Еще один способ убрать цифры после запятой - использовать форматирование строк. Мы можем использовать метод format() или строковый литерал с форматированием. При этом, мы можем указать количество знаков после запятой, которое хотим сохранить:
number = 3.14159 formatted_number = "".format(number) print(formatted_number) # Вывод: 3
В этом примере, используется метод format() для форматирования строки. Директива указывает, что мы хотим вывести число без десятичных знаков.
4. Использование оператора "//"
Оператор // выполняет целочисленное деление, убирая десятичную часть числа:
number = 3.14159 integer_division = number // 1 print(integer_division) # Вывод: 3
В этом примере, значение переменной number делится на 1 с помощью оператора //, что приводит к удалению десятичной части числа.
5. Использование модуля math
Если вы работаете с более сложными математическими операциями, вы можете использовать модуль math в Python. Метод floor() в модуле math округляет число вниз и убирает десятичную часть:
import math number = 3.14159 rounded_down = math.floor(number) print(rounded_down) # Вывод: 3
В этом примере, модуль math импортируется, и метод floor() используется для округления числа вниз.
6. Суммирующий слово
Также рассмотрим, как суммировать слово:
number = 3.14159 summed_number = "<>".format(int(number)) print(summed_number) # Вывод: 3
В этом примере, мы используем форматирующую строку "<>" и преобразуем число в целое число с помощью функции int().
Вывод
Теперь, у вас есть несколько способов убрать цифры после запятой в Python. Выберите тот, который лучше всего соответствует вашим потребностям и требованиям вашего проекта.
Фиксированное количество знаков после запятой в Python
Вот так можно указать количество знаков после запятой при выводе:
a = [1000, 2.4, 2.23456754323456, 2754.344] for i in a: print('%.3f' % i) # 3 знака после запятой
1000.000 2.400 2.235 2754.344
Отслеживать
ответ дан 4 апр 2017 в 18:55
Кирилл Малышев Кирилл Малышев
10.8k 1 1 золотой знак 19 19 серебряных знаков 34 34 бронзовых знака
а чем запись print('%.3f' % i) лучше(хуже) записи x = float('<:.3f>'.format(x)) ?
12 янв 2019 в 13:56
@Rashid-s, рекомендуется в Python 3 использовать format. stackoverflow.com/questions/12382719/…
12 янв 2019 в 14:04
Мне кажется что вы слегка усложняете. Есть чудесная функция round(), в которую в можете передать число, а через запятую передать количество знаков после. Так как всё равно там будет округление
d = round(3.14, 1) print(d) # 3.1
Отслеживать
ответ дан 23 авг 2020 в 13:01
41 2 2 бронзовых знака
Вы пробовали тестировать ваше решение на примерах из вопроса?
23 авг 2020 в 13:12
Почему вы считаете, что ТС что-то услажняет? round (123.000001, 3) # 123.0 , но ожидаемый результат другой. Он является нескромным желанием? Если да, то почему?
23 авг 2020 в 13:28
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
Отслеживать
ответ дан 5 апр 2017 в 8:50
vadim vaduxa vadim vaduxa
8,897 15 15 серебряных знаков 24 24 бронзовых знака
Я для этого использую встроенный модуль. Понятно, что он возвращает 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 )
Отслеживать
ответ дан 11 апр 2020 в 13:23
Nick Alexander Nick Alexander
если нужно не округлить, а именно обрезать знаки после запятой n = float(input())
print(int(n * 1000) / 1000)
print(n * 1000 //1 /1000)
a=input() print(float(a[:5])) #если заранее известно количество знаков
Удалить все символы после запятой .replace(",*", "")
Есть число, например, 130203,93
Должно получится: 130203 В Экселе это удаляется легким шаблоном найти и заменить: ",*" - удалится запятая и все после нее. Как сделать то же самое в .replace ? Пробовал так:
.replace(",*" , "")
не получилось. Какой символ в "регулярных" выражениях заменяет * на "все что после"?
Либо как указать в том же реплейсе, чтобы удалялось несколько любых символов, например 2 после запятой и включая запятую? Спасибо!
Отслеживать
2,067 2 2 золотых знака 24 24 серебряных знака 44 44 бронзовых знака
задан 13 мар 2016 в 18:36
992 3 3 золотых знака 10 10 серебряных знаков 24 24 бронзовых знака
7 ответов 7
Сортировка: Сброс на вариант по умолчанию
Мне помог такой код .split(",")[0]
Как я понял делит строку на две части, и возвращает первый кусок до запятой т.е. [0] . Но вопрос открытый как это сделать в replace 🙂
Отслеживать
ответ дан 13 мар 2016 в 19:40
992 3 3 золотых знака 10 10 серебряных знаков 24 24 бронзовых знака
А зачем replace, если и так работает как надо?
13 мар 2016 в 19:47
Интересны новые знания - а так конечно не знаю "зачем" и "чем лучше".
13 мар 2016 в 19:50
можно передать maxsplit параметр, чтобы не разбивать строку без необходимости: s.split(',', 1)[0]
20 мар 2016 в 14:27
Если задача состоит именно в удалении первой запятой и всего что после нее, вот это сработает:
s = "abcd1234,5678" print s[:s.find(',')]
Regexp для вашей задачи - наверняка перебор.
Отслеживать
ответ дан 13 мар 2016 в 19:12
Владимир Мартьянов Владимир Мартьянов
9,689 4 4 золотых знака 23 23 серебряных знака 36 36 бронзовых знаков
Скажите пожалуйста а почему перебор? Они слишком сложные для понимания новичку или грузят систему? Хотелось бы просто знать этот грааль аналог звездочки * в экселе 🙂
13 мар 2016 в 19:33
Сложные, вы, например, не смогли сходу его написать, кто-то другой может не понять. А в терминах "найти символ и отрезать все после" вы прекрасно описали задачу сами, осталась реализация. Код для работы с regexp внутри огромен и требует времени на исполнение. Ну и зачем делать сложно, если можно просто?
13 мар 2016 в 19:38
Спасибо работает, скажите а почему у вас после print нету скобок () - видел такое в видео уроках. У меня такое на винде и в линуксе не прокатывает. Это зависит от версии питона или каких то настроек?
13 мар 2016 в 19:42
@Amaroc, да, я по привычке для второго код пишу, в третей версии требуются скобки.
13 мар 2016 в 19:43
к моему коду почему то не пристыковался ваш вариант. А вот с split все ок. Пример такой: money.replace("\xa0" , "").split(",")[0] - тут я еще удаляю некие пробелы в цифрах, а потом уже запятые.
13 мар 2016 в 19:56
Подключаем модуль для работы с регулярными выражениями:
import re
MyString = re.sub(r',\d+', '', MyString)
Регулярку задаём без открывающего и закрывающего слеша, но с r перед строкой. Второй аргумент - строка (не регулярка!), которой заменить. Данная регулярка отсечёт все цифры после запятой, вместе с ней. Другие символы будут проигнорированы, однако для работы со строковыми представлениями чисел этого достаточно.
А .replace , теперь (не знаю, как раньше), не работает с регулярными выражениями, - только с простыми строками.
Подробнее про модуль re тут.
Отслеживать
ответ дан 13 мар 2016 в 20:22
2,067 2 2 золотых знака 24 24 серебряных знака 44 44 бронзовых знака
вопрос просит удалить все символы, а не только цифры ( \d ) после запятой.
20 мар 2016 в 14:29
@jfs в начале вопроса очень чётко указаны исходные данные: есть число. В числе никаких других символов, кроме цифр, после запятой быть не может, иначе это уже строка.
20 мар 2016 в 14:35
Если имеется число в строковом представлении формата "12345.123", то чтобы отбросить цифры после запятой, достаточно int(float("12345.123")) = 12345
Отслеживать
ответ дан 20 мар 2016 в 13:17
Dinar Gataullin Dinar Gataullin
91 5 5 бронзовых знаков
Вопрос поставлен так, что требуется преобразовать число
20 мар 2016 в 17:00
Воспользуйтесь floor() из модуля math.
math.floor(130203.93)
Отслеживать
ответ дан 13 мар 2016 в 18:39
19.5k 29 29 золотых знаков 49 49 серебряных знаков 139 139 бронзовых знаков
спасибо но речь не об округлении (как я понял), а именно о приведении данных в тот вид который подойдет как для экселя так и для гугл спредшится (на сколько помню один кушает запятые а другой точки - что не может не раздражать), поэтому по привычки от запятых и точек в "деньгах" стараюсь избавлятся. Это в частном случае - а в общем интересно узнать именно спецсимвол который обозначает "всё после этого" в экселе это *, а в питоне?
13 мар 2016 в 19:04
@Amaroc: math.floor(f) не округляет. Эта функция возвращает наибольшее целое число меньше либо равное f (отличается от int(f) ). Это было бы возможным ответом, если бы на входе у вас были числа с плавающей точкой, а не строки.
20 мар 2016 в 14:34
Чтобы удалить все символы после первой запятой, включая саму запятую, из строки:
s = 'a,b,c' before_comma = s.partition(',')[0] # -> 'a'
Все(!) ответы, приведённые на данный момент, кроме s.split(',', 1)[0] не справляются с этой простой задачей, например:
-
s[:s.find(',')] может молча вернуть неправильный ответ, если в строке нет запятых. Правильное решение должно обрабатывать случай s.find(',') == -1 , то есть когда ',' not in s :
i = s.find(',') before_comma = s[:i] if i != -1 else s
import re before_comma = re.sub(',.*', '', s, flags=re.DOTALL)
Чтобы удалить произвольную пунктуацию, можно использовать r"\p+" regex: Как найти символы из кортежа ('!',',','?') в строке и удалить их?
Если входные данные в Excel, то следует убедиться что числа с плавающей точкой экспортируются в csv, используя точку, а не запятую в качестве разделителя — это может помочь правильно округлить результат, если данные рассматриваются как числа, а не строки. Или можно использовать библиотеки, которые позволяют работать с Еxcel файлами (например: xlrd , openpyxl ) или самим Excel напрямую.