Как записать десятичную дробь в питоне
Перейти к содержимому

Как записать десятичную дробь в питоне

  • автор:

Числа: целые, вещественные, комплексные

Python 3 логотип

Числа в Python 3: целые, вещественные, комплексные. Работа с числами и операции над ними.

Целые числа (int)

Числа в Python 3 ничем не отличаются от обычных чисел. Они поддерживают набор самых обычных математических операций:

x + y Сложение
x — y Вычитание
x * y Умножение
x / y Деление
x // y Получение целой части от деления
x % y Остаток от деления
-x Смена знака числа
abs(x) Модуль числа
divmod(x, y) Пара (x // y, x % y)
x ** y Возведение в степень
pow(x, y[, z]) x y по модулю (если модуль задан)

Также нужно отметить, что целые числа в python 3, в отличие от многих других языков, поддерживают длинную арифметику (однако, это требует больше памяти).

Над целыми числами также можно производить битовые операции

x | y Побитовое или
x ^ y Побитовое исключающее или
x & y Побитовое и
x

Битовый сдвиг влево
x >> y Битовый сдвиг вправо
~x Инверсия битов

Дополнительные методы

int.bit_length() — количество бит, необходимых для представления числа в двоичном виде, без учёта знака и лидирующих нулей.

 int.to_bytes(length, byteorder, *, signed=False) - возвращает строку байтов, представляющих это число.
 int.from_bytes(bytes, byteorder, *, signed=False) - возвращает число из данной строки байтов.

Те, у кого в школе была информатика, знают, что числа могут быть представлены не только в десятичной системе счисления. К примеру, в компьютере используется двоичный код, и, к примеру, число 19 в двоичной системе счисления будет выглядеть как 10011. Также иногда нужно переводить числа из одной системы счисления в другую. Python для этого предоставляет несколько функций:

  • int([object], [основание системы счисления]) — преобразование к целому числу в десятичной системе счисления. По умолчанию система счисления десятичная, но можно задать любое основание от 2 до 36 включительно.
  • bin(x) — преобразование целого числа в двоичную строку.
  • hex(х) — преобразование целого числа в шестнадцатеричную строку.
  • oct(х) — преобразование целого числа в восьмеричную строку.

Вещественные числа поддерживают те же операции, что и целые. Однако (из-за представления чисел в компьютере) вещественные числа неточны, и это может привести к ошибкам:

 Для высокой точности используют другие объекты (например Decimal и Fraction)).

Также вещественные числа не поддерживают длинную арифметику:

Простенькие примеры работы с числами:

float.as_integer_ratio() — пара целых чисел, чьё отношение равно этому числу.

float.is_integer() — является ли значение целым числом.

float.hex() — переводит float в hex (шестнадцатеричную систему счисления).

classmethod float.fromhex(s) — float из шестнадцатеричной строки.

  Помимо стандартных выражений для работы с числами (а в Python их не так уж и много), в составе Python есть несколько полезных модулей.

Модуль math предоставляет более сложные математические функции.

 

В Python встроены также и комплексные числа:

     : complex()   Для работы с комплексными числами используется также модуль cmath.

Для вставки кода на Python в комментарий заключайте его в теги

  • Модуль csv - чтение и запись CSV файлов
  • Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
  • Онлайн-обучение Python: сравнение популярных программ
  • Книги о Python
  • GUI (графический интерфейс пользователя)
  • Курсы Python
  • Модули
  • Новости мира Python
  • NumPy
  • Обработка данных
  • Основы программирования
  • Примеры программ
  • Типы данных в Python
  • Видео
  • Python для Web
  • Работа для Python-программистов
  • Сделай свой вклад в развитие сайта!
  • Самоучитель Python
  • Карта сайта
  • Отзывы на книги по Python
  • Реклама на сайте

Период десятичной дроби

Задача : на вход в функцию подается два целых числа (int(a), int(b)) . Вернуть нужно частное a/b , причем повторяющиеся числа (период) нужно взять в скобки. Примеры:

1/3 = > 0.(3) 29/12 = > 2.41(6) 5/3 = > 1.(6) 

Подошел к решению задачи методом брутфорса. Перебирал дробную часть , искал совпадения. Но в случае 1/117 в период входит более 90 чисел и перебор чисел занимает больше времени, чем позволено в задаче. Как по-другому решить эту задачу? Может есть более элегантное решение?

Отслеживать
49k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 17 авг 2017 в 20:15
325 1 1 золотой знак 3 3 серебряных знака 13 13 бронзовых знаков

Брут бывает разный. Я реализовывал в свое время деление в столбик и как только получал ту же пару делимое-делитель что уже была - считал что нашел период.

17 авг 2017 в 20:57
По времени прошло?
18 авг 2017 в 9:25
Да ,все идеально.Жалко, что рейтинга у меня пока нету, чтобы отблагодарить лайком 🙂
18 авг 2017 в 9:26
Отметьте решением 🙂
18 авг 2017 в 9:28
1/117 в периоде 6 цифр, а не "более 90 чисел".
7 янв 2020 в 17:14

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Для поиска периода рационального числа существует отдельный алгоритм. Перебираем одну за другой степени числа 10: 10, 100, 1000, 10000 и т.д. Смотрим на остаток от деления этого числа на знаменатель. Если остаток от деления равняется 1, значит степень числа 10, это длина периода. Например, если в знаменателе стоит 13, то:

10 % 13 = 10 100 % 13 = 9 1000 % 13 = 12 10000 % 13 = 3 100000 % 13 = 4 1000000 % 13 = 1 

Получается, период равен 6. Этот период не зависит от того, что стоит в числителе (если дробь сокращена).

Метод не работает, если знаменатель делится на 5 или 2. В таком случае его нужно делить на 2, или 5, пока получится число, которое не делится на 2, 5.

В общем случае (как для вашего примера 1/117), придется использовать длинную арифметику.

Алгоритм ищет только длину периода, что бы получить сам период, нужно делить самому.

Python. Из десятичной дроби — в обычную

У класса float есть прекрасный метод as_integer_ratio() , который представляет десятичную дробь в виде обычной — пары «числитель, знаменатель»:

>>> (0.25).as_integer_ratio() (1, 4) >>> (0.5).as_integer_ratio() (1, 2) >>> (0.75).as_integer_ratio() (3, 4) 

Так вот. Никогда им не пользуйтесь ツ Потому что:

>>> (0.2).as_integer_ratio() (3602879701896397, 18014398509481984) 

Виной всему стандарт представления дробных чисел IEEE 754, который реализует float.

>>> from decimal import Decimal >>> Decimal("0.2").as_integer_ratio() (1, 5) 

Уверен, вы и так это знаете. Просто на всякий случай ツ

Подписывайтесь на канал, чтобы не пропустить новые заметки ��

Числа с плавающей точкой¶

Десятичные дроби в Python хранятся в формате с плавающей точкой и представлены типом float . Они могут быть записаны несколькими способами:

>>> 1. 1.0 >>> .1 0.1 >>> 4.2 4.2 >>> 4.2e3 # то же, что и 4.2 * 10 ** 3 == 4.2 * 1000 4200.0 >>> 4.2e-3 # то же, что и 4.2 * 10 ** (-3) == 4.2 * 0.001 0.0042 

Конструкция float(x) принимает строку или целое число и возвращает число с плавающей точкой, т.е. объект типа float . Примеры:

>>> float("1.2") 1.2 >>> float(42) 42.0 >>> float("42e3") 42000.0 

Для вывода чисел с плавающей точкой, как и для вывода других объектов, может быть использована функция print :

pi = 3.1415 print(pi) print(f"pi = pi>") 

Также существует способ указать количество выводимых знаков после запятой:

pi = 3.1415 print(f"pi = pi:.3f>") print(f"pi = pi:.4f>") 

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

>>> int(42.9) 42 

Для решения вычислительных задач может быть полезен модуль math из стандартной библиотеки языка Python. Для его использования нужно написать строку import math . Для решения задач нам понадобятся число \(\pi\) и функция извлечения квадратного корня. Примеры их использования:

import math print(f"pi = math.pi>") r = math.sqrt(4) print(f"square root of 4 = r>") 

Задачи¶

  1. Дан диаметр окружности \(d\) . Найти ее длину по формуле \(length = \pi \cdot d\) .
  2. Дано значение температуры \(t\_f\) в градусах Фаренгейта. Определить значение этой же температуры в градусах Цельсия. Температура по Цельсию \(t\_c\) и температура по Фаренгейту \(t\_f\) связаны следующим соотношением:

\[t\_c = (t\_f - 32) \cdot \frac<5>\]
\[ \begin\beginc = \sqrt\\p = a + b + c\end\end \]

© Copyright Revision d00c0df4 .

Built with Sphinx using a theme provided by Read the Docs.
Read the Docs v: latest

Versions latest Downloads html On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *