Как убрать дробную часть, не округляя число?
Из числа 0.15771428571428572 требуется убрать дробную часть после первого знака после запятой без округления, т.е.:
0.15771428571428572 = 0.1
0.20152380952380952 = 0.2
0.19123809523809523 = 0.1
Но в третьем случае почему-то округляется до 0.2.
print(414 / 2625) # 0.15771428571428572 print(float(''.format(414 / 2625))) # 0.2
Как сделать так, чтобы он отбрасывал всё, кроме первого знака после запятой, не округляя?
- Вопрос задан более двух лет назад
- 3657 просмотров
1 комментарий
Простой 1 комментарий
Как вывести дробную часть числа питон
Здравствуйте!
Подскажите, пожалуйста, как получить дробную часть числа?
Например, 97.54, как мне получить 54?
Если можно, то без дополнительных функций.
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,291
a = 97.54 f = a - int(a)
import math a = 97.54 f, _ = math.modf(a)
Пишите язык программирования — это форум программистов , а не экстрасенсов. (<= это подпись )
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
Сообщение от BDA
f = a — int(a)
А разве мы не получим 0.54, а ТС хочет получить 54?
Форумчанин
Регистрация: 12.09.2008
Сообщений: 621
Сообщение от Arigato
. ТС хочет получить 54?
Да! Как это сделать?
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,291
Arigato, да, и правда, получим дробное. Женя32, например:
int(str(97.54).split('.')[1])
Но тут могут быть нюансы: сколько нужно знаков после запятой, как предполагается использовать число.
Пишите язык программирования — это форум программистов , а не экстрасенсов. (<= это подпись )
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,551
Можно в цикле умножать на 10, пока дробная часть не станет равна нулю или же не достигнем нужного числа знаков.
Форумчанин
Регистрация: 12.09.2008
Сообщений: 621
Сообщение от BDA
Arigato, да, и правда, получим дробное. Женя32, например:
int(str(97.54).split('.')[1])
Но тут могут быть нюансы: сколько нужно знаков после запятой, как предполагается использовать число.
Все, работает! Спасибо!
Форумчанин
Регистрация: 12.09.2008
Сообщений: 621
Возник вопрос: почему split переворачивает цифры числа?
Например, было 10 выдает 01, было 30 выдает 03, было 50 выдает 05, и т.д.
Как это исправить?
Форумчанин
Регистрация: 02.06.2021
Сообщений: 515
Показывайте код. У меня не переворачивает.
Форумчанин
Регистрация: 12.09.2008
Сообщений: 621
Я не правильно сказал. От десятков убирает 0, было 10 стало 1, было 30 стало 3 и т.д.
price = [22.10, 12.20, 22.30, 33.60]
for i in range(len(price)):
if price[i] % 1 != 0:
st = str(price[i])
inp = st.split(‘.’)[-1]
print(inp)price = [22.10, 12.20, 22.30, 33.60]
for i in range(len(price)):
if price[i] % 1 != 0:
st = str(price[i])
inp = st.split(‘.’)[-1]
print(inp)
Последний раз редактировалось Женя32; 14.07.2021 в 18:28 .
Страница 1 из 2 | 1 | 2 | Следующая > |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как посчитать дробную и целую часть числа переводя его из 10-тичной в 8-ричную систему?! | diallfam | Помощь студентам | 2 | 06.05.2012 01:44 |
выделить дробную часть числа | unbanned | Паскаль, Turbo Pascal, PascalABC.NET | 12 | 18.06.2011 22:23 |
как получить дробную часть float | ]tach[ | C++ Builder | 6 | 23.01.2011 15:57 |
простой вопрос — как получить дробную часть | Inta | Microsoft Office Excel | 2 | 19.11.2008 22:11 |
отделить дробную часть от числа | |v||v| | Общие вопросы C/C++ | 19 | 24.09.2008 18:21 |
Вывести дробную часть положительного числа на Питоне
Дано положительное действительное число X. Выведите его дробную часть. Вот моё решение, но оно неправильное:
print((int(a*1000)-(floor(a))*1000)/1000)
Отслеживать
52.4k 11 11 золотых знаков 110 110 серебряных знаков 312 312 бронзовых знаков
задан 12 дек 2017 в 18:22
59 1 1 золотой знак 1 1 серебряный знак 2 2 бронзовых знака
А что у вас получилось до сих пор?
12 дек 2017 в 18:28
print((int(a*1000)-(floor(a))*1000)/1000) получилось как-то так,но это решение неправильное
12 дек 2017 в 18:40
@helenmay ответ примите нажатием на галочку слева от него
10 мая 2018 в 9:28
6 ответов 6
Сортировка: Сброс на вариант по умолчанию
Остаток от деления на единицу, как это ни странно, даст нужный результат:
print (a%1)
Отслеживать
49.3k 17 17 золотых знаков 57 57 серебряных знаков 101 101 бронзовый знак
ответ дан 13 дек 2017 в 7:39
Владимир Мартьянов Владимир Мартьянов
9,689 4 4 золотых знака 23 23 серебряных знака 36 36 бронзовых знаков
>>> (15 / 8) % 1 0.875 >>> 15 / 8 1.875 Всё простое— реально очень просто!
10 фев 2022 в 18:06
@AlexandrDragunkin floating point и «просто» это несовместимо. К примеру можно подумать о поведении с отрицательным нулем -0.0 (какой знак у дробной части?), math.inf (чему дробная часть должна быть равна для бесконечности?), будет ли потеря точности для subnormal величин? — поведение %1 и math.modf может отличаться.
3 фев в 19:45
Да уж, не всё так однозначно >>> 15 / (- 8) % 1 0.125 >>> 15 / -8 -1.875 Наверное надо так abs(15/-8)%1 Хотя math.modf реально надёжнее. @jfs, спасибо! >>> math.modf(15 / -8) (-0.875, -1.0)
Математические операции в Python: как вывести дробную часть и работать с числами
Представление чисел в Python 3 не отличается от обычных математических чисел. И поддерживают такие числа самые обыкновенные операции: сложение, вычитание, умножение, деление, возведение в степень, получение дробной части и т. п.
Целые числа (int)
Ниже вы можете увидеть стандартные Python-операции, в которых используется целое число (int):
a + b | Складываем |
a — b | Вычитаем |
a * b | Умножаем |
a / b | Делим |
a // b | Можем вывести целую часть от деления |
a % b | Можем вывести остаток от деления |
-a | Меняем знак числа |
abs(x) | Можем вывести модуль числа x |
divmod(a, b) | Пара (a // b, a % b) |
a ** b | Операция для возведения в степень |
pow(a, b[, x]) | ab по модулю (в случае, если модуль задан) |
Кроме того, числа int в Python 3 поддерживают длинную арифметику в отличие от некоторых других языков программирования. Однако для этого требуется больше памяти.
Битовые операции
Над числами int в Python можно выполнять и битовые операции. К примеру, a | b — это побитовое «или». Есть и другие варианты:
a ^ b | Побитовое исключающее или |
a & b | Побитовое и |
a | Сдвиг влево |
a >> b | Сдвиг вправо |
~a | Инверсия битов |
Дополнительные методы и операции в Python
В эти операции входят: • int.bit_length() — количество бит, которое необходимо, чтобы представить число в двоичном виде без учёта лидирующих нулей и знака; • int.to_bytes(length, byteorder, *, signed=False) — метод возвращает строку байтов, которые представляют это число; • classmethod int.from_bytes(bytes, byteorder, *, signed=False) — возвращение числа из заданной строки байтов.
Пример работы последнего метода:
>>> >>> int.from_bytes(b'\x00\x10', byteorder='big') 16 >>> int.from_bytes(b'\x00\x10', byteorder='little') 4096 >>> int.from_bytes(b'\xfc\x00', byteorder='big', signed=True) -1024 >>> int.from_bytes(b'\xfc\x00', byteorder='big', signed=False) 64512 >>> int.from_bytes([255, 0, 0], byteorder='big') 16711680Операции с системами счисления
Как гласит математика и информатика, числа можно представить как в десятичной, так и в двоичной системе счисления. Допустим, число 19 в двоичной системе имеет вид 10011. Также можно переводить числа из одной системы в другую. В Python для этого есть ряд функций: • int([object], [основание системы счисления]) — функция нужна для преобразования к целому числу. По умолчанию речь идёт о десятичной системе, однако можно задать любое основание в пределах чисел 2-36. • bin(x) — функция для преобразования целого числа в двоичную строку; • hex(х) — аналогично, но действительное целое число преобразуется в шестнадцатеричную строку; • oct(х) — для преобразования чисел в восьмеричную строку.
>>> >>> a = int('19') # Строка переводится в число >>> b = int('19.5') # Строка не является числом Traceback (most recent call last): File "", line 1, in ValueError: invalid literal for int() with base 10: '19.5' >>> c = int(19.5) # Отсекает дробную часть, если применена к числу с плавающей точкой >>> print(a, c) 19 19 >>> bin(19) '0b10011' >>> oct(19) '0o23' >>> hex(19) '0x13' >>> 0b10011 # Вариант записи числовых констант 19 >>> int('10011', 2) 19 >>> int('0b10011', 2) 19Операции с вещественными числами (float)
Чтобы вывести дробную часть, в Python используют вещественные числа. Они поддерживают выполнение тех же операций, что и в случае с int. Но из-за особенностей их представления в компьютере, когда выводишь дробную часть, возможны неточности и даже ошибки:
>>> >>> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 0.9999999999999999Для повышения точности операций используются такие объекты, как Decimal и Fraction.
Вспомогательные методы
К ним относят:
• float.as_integer_ratio() — это пара целых чисел int, отношение которых равно этому числу; • float.is_integer() — функция определят, является ли данное значение целым числом; • float.hex() — функция переводит float в 16-тиричную систему счисления, то есть в hex; • classmethod float.fromhex(s) — функцию используют для получения float из 16-тиричной строки.Кроме стандартных выражений, в Python есть и специальные полезные модули. Например, модуль math позволяет выполнять более сложные арифметические функции:
>>> >>> import math >>> math.pi 3.141592653589793 >>> math.sqrt(85) 9.219544457292887А вот модуль random запускает генератор случайных чисел, позволяя реализовать функции случайного выбора:
>>> >>> import random >>> random.random() 0.75849839767373282Комплексные числа в Python (complex)
Также в Python встроены комплексные числа:
>>> >>> x = complex(1, 2) >>> print(x) (1+2j) >>> y = complex(3, 4) >>> print(y) (3+4j) >>> z = x + y >>> print(x) (1+2j) >>> print(z) (4+6j) >>> z = x * y >>> print(z) (-5+10j) >>> z = x / y >>> print(z) (0.44+0.08j) >>> print(x.conjugate()) # Сопряжённое число (1-2j) >>> print(x.imag) # Мнимая часть 2.0 >>> print(x.real) # Действительная часть 1.0 >>> print(x > y) # Числа нельзя сравнить Traceback (most recent call last): File "", line 1, in TypeError: unorderable types: complex() > complex() >>> print(x == y) # Однако можно проверить их на равенство False >>> abs(3 + 4j) # Модуль 5.0 >>> pow(3 + 4j, 2) # Возведение в степень, получение значения степени (-7+24j)Кроме того, для работы с complex может применяться модуль cmath.
На этом пока что всё. Следите за новостями и не забывайте оставлять свои комментарии!