Дано положительное действительное число X. Выведите его дробную часть.
Вот моё решение, но оно неправильное:
print((int(a*1000)-(floor(a))*1000)/1000)
jfs
51.8k11 золотых знаков107 серебряных знаков306 бронзовых знаков
задан 12 дек 2017 в 18:22
3
Остаток от деления на единицу, как это ни странно, даст нужный результат:
print (a%1)
insolor
45.7k15 золотых знаков54 серебряных знака95 бронзовых знаков
ответ дан 13 дек 2017 в 7:39
Владимир МартьяновВладимир Мартьянов
9,6394 золотых знака21 серебряный знак35 бронзовых знаков
1
Чтобы разделить число на дробную и целые части, можно math.modf()
использовать:
>>> import math
>>> math.modf(1.5)
(0.5, 1.0)
ответ дан 13 дек 2017 в 8:13
jfsjfs
51.8k11 золотых знаков107 серебряных знаков306 бронзовых знаков
print(x - int(x))
– это более точный вариант, но print(a%1)
также сработает
Twiss
6,3234 золотых знака24 серебряных знака52 бронзовых знака
ответ дан 22 мар 2018 в 11:32
ФеликсФеликс
111 бронзовый знак
import math
x = float(input())
y = x-math.floor(x)
print(y)
И округлить по вкусу)))
ответ дан 13 июн 2020 в 12:32
Kanrit Kanrit
112 бронзовых знака
Из курса ВШЭ решал задание такое вот так:
from math import *
x = float(input())
if x > 1:
a = floor(x)
b = x - a
print(round(b, 2))
else:
print(x)
0xdb
51.4k194 золотых знака56 серебряных знаков232 бронзовых знака
ответ дан 1 июл 2020 в 20:11
def solution(n):
decimal = divmod(n, 1)
return round(list(decimal)[1], 10)
print(solution(4.1))
Ответом будет 0.1| divmod(n,1) разделит число n на кортеж (4.0, 0.0999999998). Дальше я просто беру число под индексом [1] , это число 0.0999999998, и затем округляю его до десятых. В итоге получается 0.1
ответ дан 5 дек 2021 в 17:11
2
Теги: python, int, программирование на 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 << b | Сдвиг влево |
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'x00x10', byteorder='big') 16 >>> int.from_bytes(b'x00x10', byteorder='little') 4096 >>> int.from_bytes(b'xfcx00', byteorder='big', signed=True) -1024 >>> int.from_bytes(b'xfcx00', 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.
На этом пока что всё. Следите за новостями и не забывайте оставлять свои комментарии!
Примеры извлечения десятичной части (или дробной части) числа в python
Возьмем для примера число “пи”:
Code language: JavaScript (javascript)
import math p = math.pi print(p)
Выводит:
3.141592653589793
Code language: CSS (css)
Чтобы извлечь десятичную часть, одним из решений является использование оператора %.
decimal_part = p % 1 pirnt(decimal_part)
Получаем:
Code language: CSS (css)
0.14159265358979312
Примечание по скорости работы:
Code language: CSS (css)
CPU times: user 13 µs, sys: 0 ns, total: 13 µs Wall time: 16.9 µs
Применение функции round()
Другим решением является использование функции round()
Code language: PHP (php)
decimal_part = p - round(p) print(decimal_part)
Выведет:
Code language: CSS (css)
0.14159265358979312
Время работы:
Code language: CSS (css)
CPU times: user 15 µs, sys: 0 ns, total: 15 µs Wall time: 18.8 µs
and want to get only the numbers after the period,
There is no such thing. Numbers don’t have digits; the string representation of the numbers has digits. And even then, floating-point numbers are not precise; you may be shown 0.3
in one context and 0.30000000000000004
in another, for the same value.
It sounds like what you are actually after is the fractional part of the numbers. There are many ways to do this, but they all boil down the same idea: it is the result when you divide (as a floating-point number) the input by 1.
For a single value, it looks like:
fractional_part = value % 1.0
or
# This built-in function performs the division and gives you
# both quotient and remainder.
integer_part, fractional_part = divmod(value, 1.0)
or
import math
fractional_part = math.fmod(value, 1.0)
or
import math
# This function is provided as a special case.
# It also gives you the integer part.
# Notice that the results are the other way around vs. divmod!
fractional_part, integer_part = math.modf(value)
To process each value in a list in the same way, use a list comprehension.
Функции относящиеся к теории чисел.
В этом разделе представлены функции относящиеся к теории чисел.
Содержание:
- Факториал числа,
- Наибольший общий делитель целых чисел,
- Функция
math.frexp()
, - Функция
math.ldexp()
, - Абсолютное значение числа,
- Остаток от деления,
- Получить дробную и целую часть числа,
- Получить точную сумму элементов списка,
- Получить число
x
со знаком числаy
, - Сравнение в пределах указанной точности,
- Наименьшее общее кратное целых чисел,
- Следующее значение
float
послеx
по направлению кy
, - Наименьший значащий бит числа
float
.
math.factorial(x)
:
Функция math.factorial()
возвращает факториал указанного числа x
.
>>> import math >>> math.factorial(5) 120
Данная функция всегда возвращает число типа int
и поддерживает длинную арифметику, т.е. величина обрабатываемого числа x
и возвращаемого результата ограничивается только возможностями компьютера.
Если x
не является целым числом или если x
является отрицательным, то будет вызвано исключение ValueError
.
Изменено в Python 3.9. Не рекомендуется передавать числа с плавающей запятой с целыми значениями (например, 5.0).
math.gcd(*integers)
:
Функция math.gcd()
возвращает наибольший общий делитель указанных целочисленных аргументов *integers
.
>>> import math >>> math.gcd(3886, 9048) # 58 # проверяем >>> 3886/58, 9048/58 # (67.0, 156.0)
- Если какой-либо из аргументов не равен нулю, то возвращаемое значение является наибольшим положительным целым числом, которое является делителем всех аргументов:
- Если все аргументы равны нулю, то возвращаемое значение равно 0.
- функция
math.gcd()
вызванная без аргументов возвращает 0.
Указанные числа должны быть целыми типа int
, но могут быть как положительными, так и отрицательными:
>>> import math >>> math.gcd(-4, -8) # 4 >>> math.gcd(-4, -8.8) # Traceback (most recent call last): # File "<stdin>", line 1, in <module> # TypeError: 'float' object cannot be interpreted as an integer
Изменено в Python 3.9: Добавлена поддержка произвольного количества аргументов. Раньше поддерживалось только два аргумента.
math.frexp(x)
:
Функция math.frexp()
возвращает кортеж из двух чисел (m, e)
таких что x == m*2**e
.
>>> import math >>> math.frexp(123) # (0.9609375, 7) >>> 0.9609375*2**7 # 123.0
Число m
принадлежит к типу float
и всегда является таким, что 0.5 <= abs(m) < 1
, даже для тех случаев, когда значением x
является произвольная степень двойки. Число e
всегда целое число int
:
>>> math.frexp(0.25) # (0.5, -1) >>> math.frexp(64) # (0.5, 7)
Если x
равен 0, то будет возвращено (0.0, 0)
.
Данная функция используется тогда, когда представление чисел типа float
не должно зависеть от архитектуры машины.
math.ldexp(x, i)
:
Функция math.ldexp()
возвращает значение равное x*2**i
, т.е. является обратной к функции math.frexp()
.
>>> import math >>> math.ldexp(3, 4) # 48.0 >>> math.ldexp(0.125, 8) # 32.0
math.fabs(x)
:
Функция math.fabs()
возвращает абсолютное значение, модуль числа x
. Результат всегда тип float
.
>>> import math >>> math.fabs(-3) 3.0
Данная функция в отличии от встроенной функции abs()
не обрабатывает комплексные числа.
math.fmod(x)
:
Функция math.fmod()
возвращает остаток от деления числа x
на число y
, вычисленный так, как это определено в библиотеке math
языка C.
>>> import math >>> math.fmod(2.23, 0.2) 0.02999999999999986
Данная функция направлена на то, что бы результат был максимально приближен к значению x - n*y
для некоторого целого числа n
, что бы этот результат имел тот же знак, что и x
, что бы разность x - n*y == abs(y)
.
Для чисел типа float
данная функция является предпочтительнее чем команда x%y
, которая в свою очередь является предпочтительной для чисел типа int
. Так как для некоторых случаев, например при x = -1e-100
и x = 1e100
, команда x%y
может вообще выдать неправильный результат.
math.modf(x)
:
Функция math.modf()
возвращает кортеж из двух чисел (f, w)
где f
это дробная, а w
– целая часть числа x
. Результат всегда имеет тип float
.
>>> import math >>> math.modf(3) # (0.0, 3.0) >>> math.modf(3.14) # (0.14000000000000012, 3.0)
math.fsum(iterable)
:
Функция math.fsum()
возвращает точную сумму значений в итерируемой последовательности iterable
. Возвращаемый результат всегда типа float
.
>>> import math >>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]) # 0.9999999999999999 >>> math.fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]) # 1.0
Может показаться, что эта сумма будет точной всегда, но на самом деле это не так:
>>> math.fsum([0.3, 0.3, 0.3]) 0.8999999999999999
Многое зависит от сборки компилятора языка C, который используется на данной платформе. Если вам нужны точные арифметические операции с десятичными дробями, то воспользуйтесь модулем decimal
.
math.copysign(x, y)
:
Функция math.copysign()
возвращает число c абсолютным значением x
, но со знаком числа y
. Возвращаемый результат всегда типа float
>>> import math >>> math.copysign(14, -12) # -14.0 >>> math.copysign(-14, 12) # 14.0
На платформах, которые поддерживают нули со знаком функция math.copysign(1.0, -0.0)
возвращает -1.0.
math.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)
:
Функция math.isclose()
возвращает True
если в пределах указанной точности, числа a
и b
близки настолько, что их можно считать равными.
>>> import math >>> x = 7 >>> y = 7.000000000000001 >>> x==y # False >>> math.isclose(x, y) # True
Считать числа близкими или нет, определяют два аргумента rel_tol
и abs_tol
.
Аргумент rel_tol
это относительный допуск, определяемый как максимально допустимая разница между числами a
и b
относительно большего из них по модулю. По умолчанию rel_tol=1e-09
, что гарантирует, что числа a
и b
будут одинаковы, в пределах 9 десятичных цифр. Чтобы числа считались равными, если они, допустим, отличаются меньше чем на 0.1%, то достаточно установить rel_tol=0.001
, но в любом случае данный параметр, должен быть больше нуля:
>>> y = 7.000001 >>> math.isclose(y, 6.999, rel_tol=0.001) # True
Аргумент abs_tol
это минимальный абсолютный допуск. полезен для сравнений, близких к нулю. Значение abs_tol
должно быть не меньше нуля.
Данная функция эквивалентна команде abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
. Значения inf
, -inf
считаются близкими только сами к себе, а NaN
не является близким ни к одному значению, включая само NaN
.
math.lcm(*integers)
:
Функция math.lcm()
возвращает наименьшее общее кратное указанных целочисленных аргументов *integers
.
- Если все аргументы отличны от нуля, то возвращаемое значение является наименьшим положительным целым числом, кратным всем аргументам.
- Если какой-либо из аргументов равен нулю, то возвращается значение
0
. - Функция
math.lcm()
, вызванная без аргументов возвращает1
.
Новое в Python 3.9.
math.nextafter(x, y)
:
Функция math.nextafter()
возвращает следующее значение float
после x
по направлению к y
.
Если x
равно y
, то функция возвращает y
.
Примеры:
math.nextafter(x, math.inf)
идет вверх: в сторону положительной бесконечности.math.nextafter(x, -math.inf)
идет вниз: в сторону минус бесконечности.math.nextafter(x, 0.0)
стремится к нулю.math.nextafter(x, math.copysign(math.inf, x))
уходит от нуля.
Новое в Python 3.9.
Смотрите также математическую функцию math.ulp()
.
math.ulp(x)
:
Функция math.isclose()
возвращает значение наименьшего значащего бита числа float
x
.
- Если
x
–NaN
(не число), то вернетx
. - Если
x
отрицательный, то вернетulp(-x)
. - Если
x
– положительная бесконечность, то вернетx
. - Если
x
равен нулю, то вернет наименьшее положительное денормализованное представимое числоfloat
(меньше минимального положительного нормализованного числаfloat
,sys.float_info.min
). - Если
x
равен наибольшему положительному представимому числуfloat
, то вернет значение младшего значащего битаx
, так что первое числоfloat
меньшеx
будетx - ulp(x)
. - В противном случае (
x
– положительное конечное число) вернет значение младшего значащего битаx
, так что первое числоfloat
большеx
равноx + ulp(x)
.
ULP означает “Единица на последнем месте”.
Новое в Python 3.9.
Смотрите также математическую функцию math.nextafter()
.