Тип float | Microsoft Learn
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
- Чтение занимает 3 мин
Числа с плавающей запятой используют формат IEEE (Института инженеров по электротехнике и электронике). Значения с одиночной точностью и типом float имеют 4 байта, состоят из бита знака, 8-разрядной двоичной экспоненты excess-127 и 23-битной мантиссы. Мантисса представляет число от 1,0 до 2,0. Поскольку бит высокого порядка мантиссы всегда равен 1, он не сохраняется в числе. Это представление обеспечивает для типа float диапазон примерно от 3,4E–38 до 3,4E+38.
Можно объявить переменные в качестве типа float или double в зависимости от нужд приложения. Основные различия между двумя типами значения заключаются в представляемой ими значимости, требуемых ресурсах хранения и диапазоне. В следующей таблице показана связь между значимостью и требованиями к хранению.
Типы с плавающей запятой
Type | Значимые цифры | Число байтов |
---|---|---|
float | 6–7 | 4 |
double | 15–16 | 8 |
Переменные с плавающей запятой представлены мантиссой, которая содержит значение числа, и экспонентой, которая содержит порядок возрастания числа.
В следующей таблице показано количество битов, выделенных мантиссе и экспоненте для каждого типа с плавающей запятой. Наиболее значимый бит любого типа float или double — всегда бит знака. Если он равен 1, число считается отрицательным; в противном случае — положительным.
Длина экспонент и мантисс
Type | Длина экспоненты | Длина мантиссы |
---|---|---|
float | 8 бит | 23 бита |
double | 11 бит | 52 бита |
Поскольку экспоненты хранятся в форме без знака, экспоненты смещены на половину своего возможного значения. Для типа float смещение составляет 127; для типа double это 1023. Можно вычислить фактическое значение экспоненты, вычтя значение смещения из значения экспоненты.
Мантисса хранится в виде бинарной доли, которая больше или равна 1 и меньше 2. Для типов float и double в мантиссе подразумевается наличие начального 1 в наиболее значимой битовой позиции, поэтому фактически длина мантисс составляет 24 и 53 бит соответственно, даже если наиболее значимый бит никогда не хранится в памяти.
Вместо только что описанного метода хранения пакет значений с плавающей запятой может хранить двоичные числа с плавающей запятой как денормализованные числа. Денормализованные числа — это ненулевые числа с плавающей запятой и зарезервированными значениями экспонент, в которых наиболее значимый бит мантиссы равен 0. Используя денормализованный формат, можно расширить диапазон числа с плавающей запятой в ущерб точности. Невозможно контролировать, в какой форме будет представлено число с плавающей запятой — нормализованной или денормализованной. Пакет значений с плавающей запятой определяет представление. В пакете значений с плавающей запятой никогда не используется денормализованная форма. Исключение составляют случаи, когда экспонента становится меньше, чем минимальное значение, которое может быть представлено в нормализованной форме.
В следующей таблице показаны минимальное и максимальное значения, которое можно сохранить в переменных каждого типа с плавающей запятой. Значения, указанные в этой таблице, применяются только к нормализованным числам с плавающей запятой; денормализованные числа с плавающей запятой имеют меньшее минимальное значение.
Диапазон типов с плавающей запятой
Type | Минимальное значение | Максимальное значение |
---|---|---|
плавающее | 1,175494351 E – 38 | 3,402823466 E + 38 |
double | 2,2250738585072014 E – 308 | 1,7976931348623158 E + 308 |
Если точность менее важна, чем размер хранимых данных, имеет смысл использовать тип float для переменных с плавающей запятой. И наоборот, если точность — наиболее важный критерий, используйте тип double.
Уровень переменных с плавающей запятой можно повысить до типа большей значимости (преобразование типа float в тип double). Повышение уровня часто происходит при выполнении арифметических действий с переменными плавающего типа. Это арифметическое действие всегда выполняется на том же уровне точности, что и переменная с наивысшим уровнем точности. Например, проанализируйте объявления следующих типов.
float f_short; double f_long; long double f_longer; f_short = f_short * f_long;
В предыдущем примере уровень переменной f_short
повышается до типа double, а затем переменная умножается на f_long
; затем результат округляется до типа float и присваивается объекту f_short
.
В следующем примере (с использованием объявлений из предыдущего примера) арифметическая операция выполняется на уровне точности переменной типа float (32-разрядной). Уровень результата затем повышается до уровня double.
f_longer = f_short * f_short;
Хранение базовых типов
Типы данных в python, как создать и вывести строку или число
Хотя в Python существует множество типов данных, есть среди них наиболее распространенные. Например, следующие:
int
— этот тип данных состоит из целых чисел.float
— этот тип используется для работы с десятичными числами.str
— переменная с типом str (от string — строка) хранит данные в виде текстовых строк.
Где используется
- Данные используются в программирования повсеместно, поэтому важно понимать, с какими именно вы сейчас работаете, и какие последствия это накладывает на процесс взаимодействия. Существует множество типов данных, но только некоторые из них используются каждым программистом.
int
— тип данных для работы с целыми числами, аfloat
— для работы с числами с плавающей точкой.str
хранит данные в строковом формате и может включать буквы, символы и цифры. В то же время вint
иfloat
использовать символы нельзя — только числа.- тип
bool
состоит всего из двух значений:True
илиFalse
. Важно отметить, что при инициализации или присваивании значения типаbool
True
илиFalse
нужно вводить без кавычек. Строковые же значения наоборот всегда заключены в кавычки.
Рекомендации по работе с типами данных
- Нужно всегда помнить о следующих особенностях типов данных: их форматах, областях применения и возможностях.
- Строковые значения всегда заключены в кавычки, тогда как
int
,float
илиbool
записываются без них.
Примеры работы с разными типами данных
Копировать Скопировано Use a different Browser
>>> my_сars_number = 3
>>> my_сars_color = "Бронза, зеленый, черный"
>>> print(my_сars_number)
>>> print(my_сars_color)
3
Бронза, зеленый, черный
В этом примере были созданы переменные двух типов данных, после чего они были выведены на экран. my_сars_number
— это целое число (int
), а my_сars_color
— строка (str
).
Рассмотрим порядок выполнения этого года:
- В первой строке создается переменная
my_сars_number
, и ей присваивается значение 3. Это внутренний процесс, поэтому увидеть результат этой операции не выйдет, только если не попробовать вывести значение переменной. - На второй строке создается еще одна переменная, которой присваивается свое значение.
- На 3 и 4 строках ранее созданные переменные выводятся на экран.
Советы:
А зачем типы данных вообще нужны в Python? Этот вопрос наверняка будет интересовать в первую очередь начинающих программистов.
- Если подумать о внутреннем устройстве компьютера, то память в нем занимается распределением, а центральный процессор отвечает за вычисления. Благодаря типам данных компьютер знает, как распределять память, для чего ее использовать и какие операции выполнять с каким типом данных.
- Отличное сравнение в данном случае — контейнеры для продуктов. Типы данных можно воспринимать как разные контейнеры. В зависимости от типа еды, ее нужно размещать в соответствующих емкостях.
- С другой стороны, если конкретные данные — это целое число, то компьютер может не думать о конвертации их в нижний или верхний регистр, поиске гласных и так далее. Если строка — то здесь уже арифметические операции, поиск квадратного корня, конвертация и прочие команды становятся нерелевантными.
Создадим число с плавающей точкой.
Копировать Скопировано Use a different Browser
>>> miami_temp_today = 103.40
>>> print(miami_temp_today)
103.4
В этом примере создаем число с плавающей точкой и выводим его на экране.
Продвинутые концепции
В Python есть и много других типов данных, например:
- байты;
- комплексные числа;
- булевые значения.
Есть даже и другие значения в других областях: дата, время, GPS-координаты и так далее. В будущем полезно использовать их особенно в крупных проектах. Но пока что остановимся на базовых.
Посмотрим на булевый тип. Это довольно простая концепция, но более сложный тип данных. Основная сложность в том, что мы не сталкиваемся с таким типом в реальном мире, и поэтому порой его сложновато воспринимать. Булевый тип можно воспринимать как переключатель. Он может быть либо включенным, либо выключенным. В Python это либо True
, либо False
.
Важно запомнить, что значения этого типа не должны быть заключены в кавычки. Это их основное отличие от строк. По сути, True
и "True"
— это два разных типа данных в Python: булевое и строка.
В более продвинутых примерах булевые типы окажутся очень полезными.
В следующем примере может показаться, что используется строка, но на самом деле это значение булевого типа. Оно может быть либо True
, либо False
.
Копировать Скопировано Use a different Browser
>>> hungry_or_not = True
>>> print(hungry_or_not)
True
Задачи к уроку
Попробуйте решить задачи к этому уроку для закрепления знаний.
1. Присвойте переменной целое число и получите вывод <class 'int'>
.
Функция
type()
возвращает тип объекта. Для решения задачи изменять нужно только первую строку.
# данный код current_month = type_var = type(current_month) print(type_var) # требуемый вывод: # <class 'int'>
2. Исправьте ошибки в коде, что бы получить требуемый вывод.
# данный код polar_radius_title = "Радиус" "Земли" polar_radius_float = 6378,1 print(polar_radius_title, polar_radius_float) # требуемый вывод: # Радиус Земли 6378.1
3. Создайте переменные, что бы получить требуемый вывод.
# данный код str_type, int_type, float_type, bool_type = print("Типы данных: ", end="") print(type(str_type), type(int_type, type(float_type), type(bool_type), sep=",") # требуемый вывод: # Типы данных: <class 'str'>, <class 'int'>, <class 'float'>, <class 'bool'>
Файл со всем заданиями: https://gitlab. com/PythonRu/python-dlya-nachinayushih/-/blob/master/lesson_3.py.
Тест по типам данных
Пройдите тест к этому уроку для проверки знаний. В тесте 5 вопросов, количество попыток неограниченно.
Какой способ создания строки вернет ошибку
str1 = «str1»
1str = «1str»
str1 = «5»
str1 = «5.5564415165»
Какой тип переменной is_admin:
is_admin = True
Код вернет ошибку, переменная True не создана
Что выведет этот код:
x = 685.0
print(x)
Ошибку, десятичную часть нужно отделять запятой
Ошибку, переменная должна быть длиннее 3х символов
«685.0»
Как создать переменную с типом float?
var = «9846»
var = «9846.499»
var = 9846
var = 9846.495
Какие типы данных из урока могут содержать цифры?
bool, str
int, float, str
int, float, bool
int, float
{{title}}
{{image}}
{{content}}
{{/global}}
Поделиться результатами через
Facebook Twitter VK
Если нашли ошибку, опечатку или знаете как улучшить этот урок, пишите на почту. Ее можно найти внизу сайта.
Основные типы данных в python. Рассмотрим int, float, string, boolean
Из этого руководства вы узнаете о базовых встроенных типах данных Python: числовых, строковых и логических (булевых).
Целые числа
В Python 3 фактически нет предела длины целочисленного значения. Конечно, оно ограничено объемом доступной в системе памяти (как и любые другие типы данных), но в остальном — может быть таким длинным, как нужно:
>>> print(123123123123123123123123123123123123123123123123 + 1) 123123123123123123123123123123123123123123123124
Python интерпретирует последовательность десятичных цифр без префикса как десятичное число:
>>> print(10) 10
Следующие строки могут быть добавлены к значению числа, чтобы обозначить основание отличное от 10:
Префикс | Интерпретация | Основание |
---|---|---|
0b (ноль + «b» в нижнем регистре) 0B (ноль + «b» в верхнем регистре) | Двоичное | 2 |
0o (ноль + «o» в нижнем регистре) 0O (ноль + «O» в верхнем регистре) | Восьмеричное | 8 |
0x (ноль + «x» в нижнем регистре) 0X (ноль + «X» в верхнем регистре) | Шестнадцатеричное | 16 |
Например:
>>> print(0o10) 8 >>> print(0x10) 16 >>> print(0b10) 2
Чтобы больше узнать о значениях целых чисел с основанием не равным 10, обратитесь к следующим статьям в Википедии: двоичная, восьмеричная, шестнадцатеричная.
Базовый тип целого числа в Python, вне зависимости от используемого основания, называется int
:
>>> type(10) <class 'int'> >>> type(0o10) <class 'int'> >>> type(0x10) <class 'int'>
Примечание: отличный момент, чтобы напомнить, что функцию print() не нужно использовать при работе в командной строке. Просто вводите значения после
>>>
и нажимайте Enter для отображения:>>> 10 10 >>> 0x10 16 >>> 0b10 2Многие примеры будут использовать эту особенность интерпретатора.
Но это не работает с файлами скриптов. Значение в строке файла со скриптом не делает ничего само по себе.
Числа с плавающей точкой
Тип float
в Python означает число с плавающей точкой. Значения float
определяются с десятичной точкой. По желанию можно добавить символ e
или E
после целого числа, чтобы обозначить, что это экспоненциальная запись.
>>> 4.2 4.2 >>> type(4.2) <class 'float'> >>> 4. 4.0 >>> .2 0.2 >>> .4e7 4000000.0 >>> type(.4e7) <class 'float'> >>> 4.2e-4 0.00042
Подробнее: представление float
Далее следует более подробная информация о том, как Python изнутри представляет числа с плавающей точкой. Вы без проблем можете пользоваться этим типом данных, не понимая этот уровень, так что не волнуйтесь, если описанное здесь покажется чересчур сложным. Информация представлена для особо любопытных.
Почти все платформы представляют числа с плавающей точкой Python как 64-битные значения двойной точности в соответствии со стандартом IEEE 754. В таком случае максимальное значение числа с плавающей точкой — это приблизительно 1.8 х 10308. Числа больше Python будет помечать в виде строки inf
:
>>> 1.79e308 1.79e+308 >>> 1.8e308 inf
Ближайшее к нулю ненулевое значение — это приблизительно 5. 0*10**-342
. Все что ближе — это уже фактически ноль:
>>> 5e-324 5e-324 >>> 1e-325 0.0
Числа с плавающей точкой представлены в виде двоичных (с основанием 2) фракций. Большая часть десятичных фракций не может быть представлена в виде двоичных, поэтому в большинстве случаев внутреннее представление — это приближенное к реальному значение. На практике отличия представленного и реального значения настолько малы, что это не должно создавать проблем.
Дальнейшее чтение: для получения дополнительной информации о числах с плавающей точкой в Python и возможных проблемах, связанных с этим типом данных, читайте официальную документацию Python.
Комплексные числа
Сложные числа определяются следующим образом: <вещественное число>+<мнимая часть>j
. Например:
>>> 2+3j (2+3j) >>> type(2+3j) <class 'complex'>
Строки
Строки — это последовательности символов. Строковый тип данных в Python называется str
.
Строковые литералы могут выделяться одинарными или двойными кавычками. Все символы между открывающей и закрывающей кавычкой являются частью строки:
>>> print("Я строка.") Я строка. >>> type("Я строка.") <class 'str'> >>> print('Я тоже.') Я тоже. >>> type('Я тоже.') <class 'str'>
Строка может включать сколько угодно символов. Единственное ограничение — ресурсы памяти устройства. Строка может быть и пустой.
А что, если нужно использовать символ кавычки в строке? Первой идеей может быть нечто подобное:
>>> '' ''
Но, как видите, такой подход не работает. Строка в этом примере открывается одинарной кавычкой, поэтому Python предполагает, что следующая закрывает ее, хотя она задумывалась как часть строки. Закрывающая кавычка в конце вносит неразбериху и приводит к синтаксической ошибке.
Если нужно включить кавычки одного типа в строку, то стоит выделить ее целиком кавычками другого типа. Если строка содержит одинарную кавычку, просто используйте в начале и конце двойные или наоборот:
>>> print('Эта строка содержит одну кавычку (').') SyntaxError: invalid syntax
Как видите, это не так хорошо работает. Строка в этом примере открывается одиночной кавычкой, поэтому Python предполагает, что следующая одинарная кавычка, та, которая в скобках является закрывающим разделителем. Окончательная одинарная кавычка тогда лишняя и вызывает показанную синтаксическую ошибку.
Если вы хотите включить любой тип символа кавычки в строку, самый простой способ — разделить строку с другим типом. Если строка должна содержать одну кавычку, разделите ее двойными кавычками и наоборот:
>>> print("Эта строка содержит одну кавычку (').") Эта строка содержит одну кавычку ('). >>> print('Эта строка содержит одну кавычку (").') Эта строка содержит одну кавычку (").
Управляющие последовательности (исключенные последовательности)
Иногда нужно, чтобы Python по-другому интерпретирован символ или последовательность нескольких символов в строке. Этого можно добиться двумя способами:
- Можно «подавить» специальное значение конкретных символов в этой строке;
- Можно создать специальную интерпретацию для символов в строке, которые обычно воспринимаются буквально;
Для этого используется обратный слэш (\
). Обратный слэш в строке указывает, что один или несколько последующих символов нужно интерпретировать особым образом. (Это называется исключенной последовательностью, потому что обратный слэш заставляет последовательность символов «исключаться» из своего привычного значения).
Посмотрим, как это работает.
Подавление значения специальных символов
Вы видели, к каким проблемам приводит использовать кавычек в строке. Если она определена одиночными кавычками, просто так взять и использовать такую же кавычку как часть текста, нельзя, потому что она имеет особенное значение — завершает строку:
>>> print('Эта строка содержит одну кавычку (').') SyntaxError: invalid syntax
Обратный слэш перед одинарной кавычкой «освобождает» ее от специального значения и заставляет Python воспринимать буквальное значение:
>>> print('Эта строка содержит символ одинарной кавычки (\'). ') Эта строка содержит символ одинарной кавычки (').
То же работает и со строками, определенными двойными кавычками:
>>> print("Эта строка содержит символ одинарной кавычки (\").") Эта строка содержит символ одинарной кавычки (").
Следующая таблица управляющих последовательностей описывает символы, которые заставляют Python воспринимать отдельные символы буквально:
Управляющий символ | Стандартная интерпретация | Исключенная интерпретация |
---|---|---|
\’ | Завершает строку, открытую одинарной кавычкой | Символ одинарной кавычки |
\» | Завершает строку, открытую двойными кавычками | Символ двойных кавычек |
\newline | Завершает строку ввода | Новая строка игнорируется |
\\ | Показывает исключенную последовательность | Символ обратного слэша |
Обычно символ новой строки (newline
) заменяет enter. Поэтому он в середине строки заставит Python думать, что она неполная:
>>> print('a SyntaxError: EOL while scanning string literal
Чтобы разбить строку на несколько строк кода, добавьте обратный слэш перед переходом на новую строку и newline
будет игнорироваться:
>>> print('a\ ... b\ ... c') abc
Для включения буквального значения обратного слэша, исключите его с помощью еще одного:
>>> print('foo\\bar') foo\bar
Добавление специального значения символам
Предположим, что необходимо создать строку, которая будет содержать символ табуляции. Некоторые текстовые редакторы вставляют его прямо в код. Но многие программисты считают, что это не правильный подход по нескольким причинам:
- Компьютер видит разницу между символом табуляции и последовательностью пробелов, но программист — нет. Человек, читающий код, не способен отличить пробелы от символа табуляции.
- Некоторые текстовые редакторы настроены так, чтобы автоматически удалять символы табуляции и заменять их на соответствующее количество пробелов.
- Некоторые REPL-среды Python не будут вставлять символы табуляции в код.
В Python (и большинстве других распространенных языков) символ табуляции определяется управляющей последовательностью \t
:
>>> print('foo\tbar') foo bar
Она заставляет символ \t
терять свое привычное значение и интерпретируется как символ табуляции.
Вот список экранированных последовательностей, которые заставляют Python использовать специальное значение вместе буквальной интерпретации:
Управляющая последовательность | «Исключенная» интерпретация |
---|---|
\a | ASCII: символ Bell (BEL) |
\b | ASCII: символ возврата на одну позицию (BS) |
\f | ASCII: символ разрыва страница (FF) |
\n | ASCII: символ перевода строки (LF) |
\N{<name> } | Символ из базы Unicode с именем <name> |
\r | ASCII: символ возврата каретки (CR) |
\t | ASCII: символ горизонтальной табуляции (TAB) |
\uxxxx | Символ Unicode с 16-битным шестнадцатеричным значением |
\Uxxxxxxxx | Символ Unicode с 32-битным шестнадцатеричным значением |
\v | ASCII: символ вертикальной табуляции (VT) |
\ooo | Символ с восьмеричным значением ooo |
\xhh | Символ с шестнадцатеричными значением hh |
Примеры:
>>> print("a\tb") a b >>> print("a\141\x61") aaa >>> print("a\nb") a b >>> print('\u2192 \N{rightwards arrow}') → →
Такой тип исключенной последовательности обычно используется для вставки символов, которые не легко ввести с клавиатуры или вывести.
«Сырые» строки
Литералу «сырой» строки предшествует r
или R
, которая подавляет экранирование, так что обратный слэш выводится как есть:
>>> print('foo\nbar') foo bar >>> print(r'foo\nbar') foo\nbar >>> print('foo\\bar') foo\bar >>> print(R'foo\\bar') foo\\bar
Строки в тройных кавычка
Есть и другой способ объявления строк в Python. Строки в тройных кавычках определяют группами из трех одинарных или двойных кавычек. Исключенные последовательности в них все еще работают, но одинарные и двойные кавычки, а также новые строки могут использоваться без управляющих символов. Это удобный способ создавать строки, включающие символы одинарных и двойных кавычек:
>>> print('''Эта строка содержит одинарные (') и двойные (") кавычки.''') Эта строка содержит одинарные (') и двойные (") кавычки.
Таким же образом удобно создавать строки, разбитые на несколько строк кода:
>>> print("""Это cтрока, которая растянута на несколько строк""") Это cтрока, которая растянута на несколько строк
Наконец, этот способ используется для создания комментариев кода Python.
Булев тип, Булев контекст и «истинность»
В Python 3 три типа Булевых данных. Объекты булевого типа принимают одно из двух значений, True
или False
:
>>> type(True) <class 'bool'> >>> type(False) <class 'bool'>
Многие выражения в Python оцениваются в булевом контексте. Это значит, что они интерпретируются как истинные или ложные.
«Истинность» объекта типа Boolean самоочевидна: объекты равные True
являются истинными, а те, что равны False
— ложными. Но не-Булевы объекты также могут быть оценены в Булевом контексте.
Тип поплавковый | Microsoft Узнайте
Обратная связь Редактировать
Твиттер LinkedIn Фейсбук Эл. адрес
- Статья
- 3 минуты на чтение
Числа с плавающей запятой используют формат IEEE (Институт инженеров по электротехнике и электронике). Значения одинарной точности с типом float имеют 4 байта, состоящие из знакового бита, 8-битной двоичной экспоненты с избыточным значением 127 и 23-битной мантиссы. Мантисса представляет собой число от 1,0 до 2,0. Поскольку старший бит мантиссы всегда равен 1, он не сохраняется в числе. Это представление дает диапазон приблизительно от 3,4E-38 до 3,4E+38 для типа float.
Вы можете объявить переменные как float или double, в зависимости от потребностей вашего приложения. Принципиальные различия между этими двумя типами заключаются в значимости, которую они могут представлять, требуемой памяти и их диапазоне. В следующей таблице показана взаимосвязь между значимостью и требованиями к хранению.
Типы с плавающей запятой
Тип | Значащие цифры | Количество байтов |
---|---|---|
поплавок | 6 — 7 | 4 |
двойной | 15 — 16 | 8 |
Переменные с плавающей запятой представлены мантиссом, которая содержит значение числа, и показателем степени, который содержит порядок величины числа.
В следующей таблице показано количество битов, выделенных для мантиссы, и показатель степени для каждого типа с плавающей запятой. Старшим битом любого float или double всегда является бит знака. Если это 1, число считается отрицательным; в противном случае оно считается положительным числом.
Длины показателей и мантиссы
Тип | Длина экспоненты | Длина мантиссы |
---|---|---|
поплавок | 8 бит | 23 бита |
двойной | 11 бит | 52 бита |
Поскольку показатели степени хранятся в беззнаковой форме, показатель степени смещен на половину своего возможного значения. Для типа float смещение равно 127; для типа double это 1023. Фактическое значение экспоненты можно вычислить, вычитая значение смещения из значения экспоненты.
Мантисса хранится в виде двоичной дроби, большей или равной 1 и меньшей 2. Для типов float и double в мантиссе в самом старшем разряде подразумевается ведущая 1, поэтому на самом деле мантиссы равны 24. и 53 бита соответственно, хотя самый старший бит никогда не сохраняется в памяти.
Вместо только что описанного метода хранения пакет с плавающей запятой может хранить двоичные числа с плавающей запятой как денормализованные числа. «Денормализованные числа» — это ненулевые числа с плавающей запятой с зарезервированными значениями экспоненты, в которых старший бит мантиссы равен 0. Используя денормализованный формат, диапазон числа с плавающей запятой может быть расширен за счет точности. Вы не можете контролировать, представлено ли число с плавающей запятой в нормализованной или денормализованной форме; пакет с плавающей запятой определяет представление. Пакет с плавающей запятой никогда не использует денормализованную форму, если показатель степени не становится меньше минимума, который может быть представлен в нормализованной форме.
В следующей таблице показаны минимальные и максимальные значения, которые можно хранить в переменных каждого типа с плавающей запятой. Значения, перечисленные в этой таблице, относятся только к нормализованным числам с плавающей запятой; денормализованные числа с плавающей запятой имеют меньшее минимальное значение. Обратите внимание, что числа, хранящиеся в 80 x 87 регистрах, всегда представлены в 80-битной нормализованной форме; числа могут быть представлены в денормализованной форме только при сохранении в 32-битных или 64-битных переменных с плавающей запятой (переменные типа float и типа long).
Диапазон типов с плавающей запятой
Тип | Минимальное значение | Максимальное значение |
---|---|---|
поплавок | 1.175494351 Э — 38 | 3.402823466 Е + 38 |
двойной | 2.2250738585072014 Э — 308 | 1.7976931348623158 Е + 308 |
Если точность важнее хранения, рассмотрите возможность использования типа float для переменных с плавающей запятой. И наоборот, если точность является наиболее важным критерием, используйте тип double.
Переменные с плавающей запятой могут быть преобразованы в более значимый тип (из типа float в тип double). Продвижение часто происходит, когда вы выполняете арифметические действия над переменными с плавающей запятой. Эта арифметика всегда выполняется с такой же высокой степенью точности, как и переменная с наивысшей степенью точности. Например, рассмотрим следующие объявления типов:
float f_short; двойной f_long; длинный двойной f_longer; f_short = f_short * f_long;
В предыдущем примере переменная f_short
преобразуется в тип double и умножается на f_long
; затем результат округляется до типа float перед присвоением f_short
.
В следующем примере (в котором используются объявления из предыдущего примера) арифметические операции над переменными выполняются с точностью до числа с плавающей запятой (32 бита); затем результат преобразуется в тип double:
f_longer = f_short * f_short;
См. также
Хранение основных типов
Обратная связь
Отправить и просмотреть отзыв для
Этот продукт Эта страница
Просмотреть все отзывы о странице
Типы данных и преобразование типов — построение графиков и программирование на Python
Обзор
Обучение: 10 мин
Упражнения: 10 минВопросы
Цели
Объяснить основные различия между целыми числами и числами с плавающей запятой.
Объясните основные различия между числами и символьными строками.
Используйте встроенные функции для преобразования целых чисел, чисел с плавающей запятой и строк.
Каждое значение имеет тип.
- Каждое значение в программе имеет определенный тип.
- Integer (
int
): представляет положительные или отрицательные целые числа, такие как 3 или -512. - Число с плавающей запятой (
float
): представляет действительные числа, такие как 3,14159 или -2,5. - Строка символов (обычно называемая «строка»,
str
): текст.- Записывается либо в одинарных, либо в двойных кавычках (если они совпадают).
- Кавычки не печатаются при отображении строки.
Используйте встроенную функцию
, введите
, чтобы найти тип значения.- Используйте встроенную функцию
type
, чтобы узнать, какой тип имеет значение. - Работает и с переменными.
- Но помните: значение имеет тип — переменная — это просто метка.
печать (тип (52))
<класс 'целое число'>
фитнес = «средний» печать (тип (фитнес))
<класс 'ул'>
Типы контролируют, какие операции (или методы) можно выполнять с данным значением.
- Тип значения определяет, что программа может с ним делать.
печать(5 - 3)
печать('привет' - 'ч')
-------------------------------------------------- -------------------------- TypeError Traceback (последний последний вызов)в () ----> 1 print('привет' - 'ч') TypeError: неподдерживаемые типы операндов для -: 'str' и 'str'
Вы можете использовать операторы «+» и «*» для строк.
- «Добавление» символьных строк объединяет их.
full_name = 'Ахмед' + ' ' + 'Уолш' печать (полное_имя)
Ахмед Уолш
- Умножение строки символов на целое число N создает новую строку, состоящую из этой строки символов, повторенной N раз.
- Так как умножение является повторяющимся сложением.
разделитель = '=' * 10 печать (разделитель)
==========
Строки имеют длину (а числа — нет).
- Встроенная функция
len
подсчитывает количество символов в строке.
печать (длина (полное имя))
- Но числа не имеют длины (даже нуля).
печать (длина (52))
-------------------------------------------------- -------------------------- TypeError Traceback (последний последний вызов)в <модуль>() ----> 1 печать (длина (52)) TypeError: объект типа 'int' не имеет len()
Должен преобразовывать числа в строки или наоборот при работе с ними.
- Невозможно добавить числа и строки.
печать (1 + '2')
-------------------------------------------------- -------------------------- TypeError Traceback (последний последний вызов)в () ----> 1 печать (1 + '2') TypeError: неподдерживаемые типы операндов для +: 'int' и 'str'
- Не разрешено, потому что неоднозначно: должно ли
1 + '2'
быть3
или'12'
? - Некоторые типы можно преобразовать в другие типы, используя имя типа в качестве функции.
печать (1 + интервал ('2')) печать (стр (1) + '2')
Может смешивать целые числа и свободно перемещаться в операциях.
- Целые числа и числа с плавающей запятой могут быть смешаны в арифметике.
- Python 3 автоматически преобразует целые числа в числа с плавающей запятой по мере необходимости.
print('половина есть', 1/2.0) print('три в квадрате', 3.0 ** 2)
половина равна 0,5 три в квадрате 9,0
- Если мы сделаем так, чтобы одна ячейка электронной таблицы зависела от другой, и обновить последний, прежний обновляется автоматически.
- В языках программирования случается , а не .
переменная_один = 1 переменная_два = 5 * переменная_один переменная_один = 2 print('первая есть', variable_one, 'и вторая есть', variable_two)
первое равно 2, а второе равно 5
- Компьютер считывает значение
variable_one
при выполнении умножения, создает новое значение и присваивает егоvariable_two
. - После этого значение
variable_two
устанавливается равным новому значению, а не зависит отvariable_one
, поэтому его значение не изменяется автоматически при измененииvariable_one
.
Фракции
Какой тип значения 3.4? Как узнать?
Решение
Это число с плавающей запятой (часто сокращенно «плавающее»). Это можно узнать с помощью встроенной функции
type()
.печать (тип (3.4))<класс 'плавающий'>
Автоматическое преобразование типов
Какой тип значения 3,25 + 4?
Решение
Это поплавок: целые числа автоматически преобразуются в числа с плавающей запятой по мере необходимости.
Результат= 3,25 + 4 печать (результат, 'есть', тип (результат))7. 25 — это <класс с плавающей запятой>
Выберите тип
Тип значения (целое число, число с плавающей запятой или строка символов) вы бы использовали для представления каждого из следующих? Постарайтесь придумать несколько хороших ответов для каждой задачи. Например, в # 1, когда подсчет дней с помощью переменной с плавающей запятой имеет больше смысла, чем использование целого числа?
- Количество дней с начала года.
- Время, прошедшее с начала года до настоящего времени в днях.
- Серийный номер единицы лабораторного оборудования.
- Возраст лабораторного образца
- Текущее население города.
- Средняя численность населения города с течением времени.
Решение
Ответы на вопросы:
- Целое число, поскольку количество дней должно лежать в диапазоне от 1 до 365.
- С плавающей запятой, поскольку требуются дробные дни
- Строка символов, если серийный номер состоит из букв и цифр, иначе целое число, если серийный номер состоит только из цифр
- Это будет варьироваться! Как определить возраст экземпляра? целые дни с момента сбора (целое число)? дата и время (строка)?
- Выберите число с плавающей запятой, чтобы представить население в виде больших агрегатов (например, миллионов), или целое число, чтобы представить население в единицах отдельных лиц.
- Число с плавающей запятой, так как среднее значение может иметь дробную часть.
Типы делений
В Python 3 оператор
//
выполняет целочисленное (целое) деление пола, оператор/
выполняет операции с плавающей запятой. деление, а оператор%
(или по модулю ) вычисляет и возвращает остаток от целочисленного деления:печать ('5 // 3:', 5 // 3) печать('5/3:', 5/3) печать('5% 3:', 5% 3)5 // 3:1 5/3: 1,6666666666666667 5 % 3:2Если
num_subjects
— это количество субъектов, принимающих участие в исследовании, аnum_per_survey
— это номер, который может принять участие в одном опросе, напишите выражение, которое вычисляет количество необходимых опросов достучаться до всех один раз.Решение
Нам нужно минимальное количество опросов, которые охватывают всех один раз, т. е. округленное значение
num_subjects/ num_per_survey
. Это эквивалентно выполнению деления этажа с помощью//
и добавления 1. Перед деление нам нужно вычесть 1 из количества предметов, с которыми нужно иметь дело случай, когдаnum_subjects
делится без остатка наnum_per_survey
.количество_субъектов = 600 num_per_survey = 42 num_surveys = (num_subjects - 1) // num_per_survey + 1 print(num_subjects, 'subjects', num_per_survey, 'за опрос:', num_surveys)600 субъектов, 42 на опрос: 15
Строки в числа
Там, где это разумно,
float()
преобразует строку в число с плавающей запятой, иint()
преобразует число с плавающей запятой в целое число:print("строка для плавания:", float("3.4")) print("с плавающей запятой в int:", int(3.4))строка с плавающей запятой: 3.4 плавать в целое: 3Однако, если преобразование не имеет смысла, появится сообщение об ошибке.
print("строка для float:", float("Hello world!"))-------------------------------------------------- -------------------------- ValueError Traceback (последний последний вызов)в <модуле> ----> 1 print("строка для плавания:", float("Привет, мир!")) ValueError: не удалось преобразовать строку в число с плавающей запятой: «Привет, мир!» Учитывая эту информацию, что вы ожидаете от следующей программы?
Что он на самом деле делает?
Как вы думаете, почему это происходит?
print("дробная строка в int:", int("3.4"))Решение
Что вы ожидаете от этой программы? Было бы не так неразумно ожидать, что команда Python 3
int
выполнит преобразовать строку «3.4» в 3.4 и дополнительное преобразование типа в 3. В конце концов, Python 3 выполняет множество других магия — не в этом ли ее очарование?интервал ("3,4")-------------------------------------------------- -------------------------- ValueError Traceback (последний последний вызов)в <модуль> ----> 1 интервал ("3,4") ValueError: неверный литерал для int() с основанием 10: '3. 4' Однако Python 3 выдает ошибку. Почему? Чтобы быть последовательным, возможно. Если вы попросите Python выполнить два последовательных typecasts, вы должны преобразовать его явно в коде.
целое число (с плавающей запятой ("3,4"))
Арифметика с различными типами
Что из следующего вернет число с плавающей запятой
2.0
? Примечание: может быть несколько правильных ответов.первый = 1,0 второй = "1" третий = "1.1"
первое + число с плавающей запятой (второе)
с плавающей запятой (второй) + с плавающей запятой (третий)
первое + целое (третье)
первый + целое (с плавающей запятой (третий))
int(первый) + int(float(третий))
2,0 * секунда
Решение
Ответ: 1 и 4
Комплексные номера
Python предоставляет комплексные числа, которые записываются как
1. 0+2.0j
. Еслиval
— комплексное число, к его реальной и мнимой частям можно получить доступ, используя точечную запись какзнач.реал
изнач.имаг
.a_complex_number = 6 + 2j печать (a_complex_number.real) печать (a_complex_number.imag)6,0 2.0
- Как вы думаете, почему Python использует
j
вместоi
для мнимой части?- Что вы ожидаете от
1 + 2j + 3
?- Что вы ожидаете от
4j
? Как насчет4 j
или4 + j
?Решение
- Стандартная математическая обработка обычно использует
i
для обозначения мнимого числа. Однако, по сообщениям СМИ, была ранней конвенцией, созданной из электротехники, которая теперь представляет собой технически дорогую область для сдача. Stack Overflow предоставляет дополнительные пояснения и обсуждение.(4+2к)
4j
иСинтаксическая ошибка: недопустимый синтаксис
. В последних случаяхj
считается переменной и оператор зависит от того, определен лиj
, и если да, то его присвоенное значение.
Ключевые моменты
Каждое значение имеет тип.
Используйте встроенную функцию
, введите
, чтобы найти тип значения.Типы определяют, какие операции можно выполнять над значениями.
Строки можно добавлять и умножать.
Строки имеют длину (а числа — нет).
Должен преобразовывать числа в строки или наоборот при работе с ними.
Может свободно смешивать целые и плавающие числа в операциях.
Переменные изменяют значение только тогда, когда им что-то присваивается.
Типы данных с плавающей запятой и вещественные числа в SQL Server
Типы данных с плавающей запятой и вещественные числа в SQL Server используют формат чисел с плавающей запятой. Real — это число с плавающей запятой одинарной точности, а Float — число с плавающей запятой двойной точности. Числа с плавающей запятой могут хранить очень больших или очень маленьких чисел, чем десятичные числа. Но этот компромисс достигается за счет точности. В этом уроке давайте подробно рассмотрим их и узнаем разницу между типами данных с плавающей и десятичной запятой или числами.
Содержание
- Что такое числа с плавающей запятой
- Число с плавающей запятой в SQL Server
- Создание столбцов с плавающей и вещественной точкой
- Десятичное число против числа с плавающей запятой
- Число с плавающей запятой может обрабатывать 900 большое количество данных точности
- Какой из них использовать
- Ссылки
Что такое числа с плавающей запятой
Числа с плавающей запятой не имеют фиксированной десятичной точки. Десятичная точка может стоять где угодно в числе, т.е. она плавает. Следовательно, они известны как числа с плавающей запятой. Поведение float и real соответствует стандарту IEEE для арифметики с плавающей запятой 9.8, где 6,5 — мантиссы, 10 — основание, 8 — показатель степени.
Числа с плавающей запятой могут быть либо 8 байтами (64 бита или двойной точности), либо 4 байтами (32 бита или одинарной точности).
Float & Real в SQL Server
SQL Server имеет два типа данных Float & Real, в которых хранятся числа с плавающей запятой.
Плавающее Тип данных — 64-битный формат двойной точности. Он использует 8 байт памяти.
Тип реальных данных — это 32-битный формат одинарной точности. Он использует 4 байта памяти
Двоичное представление этих чисел показано ниже.
Первый бит — это знаковый бит, который указывает, является ли число положительным или отрицательным. 0 означает положительный. Показатель степени может быть либо 11-битным (с плавающей запятой), либо 8-битным (действительным). Значимое использует оставшиеся места. 52 бита в случае типа данных с плавающей запятой и 23 бита в случае типа данных Real
Создание столбцов с плавающей запятой и вещественных значений
Синтаксис для создания столбца с плавающей запятой float(n), когда n находится в диапазоне от 1 до 53. Значение по умолчанию п равно 53,
Преобразование float(1) в float(23) создаст 32-битный столбец одинарной точности, который на самом деле имеет тип данных Real. Следовательно, SQL Server автоматически сопоставляет его с типом данных Real.
Float(24) to float(53) создаст 64-битный столбец Double Precision, следовательно, они станут просто float.
1 2 3 4 5 6 7 8 10 12 10 12 10 12 10 12 10 10 9000 3 10 9000 3 0003 13 14 | Create Table Testfloat ( Col10 Float (10), Col20 Float (20), Col23 Float (23), Col20. COL25 Float (25), COL30 Float (30), COLF Float, COLR Real, ) |
Как вы видите, n удаляется из колонны. определения.
Десятичное число против числа с плавающей запятой
Десятичное число и число с плавающей запятой могут хранить десятичные числа, поэтому очень важно знать разницу между ними.
Десятичный | С плавающей запятой | ||||||||
---|---|---|---|---|---|---|---|---|---|
Положение десятичного знака фиксировано. | Положение десятичного знака не фиксировано | ||||||||
Максимальная точность, с которой вы можете работать, составляет 38 цифр (включая десятичные точки) | Может обрабатывать большое количество данных | ||||||||
Результаты более точны по сравнению с плавающей точкой. | Арифметические операции могут привести к потере точности | ||||||||
Десятичные значения данных сохраняются точно так, как указано. | Для хранения данных используется 64-битный формат двойной точности или 32-битный формат одинарной точности. Это приводит к аппроксимации сохраненного значения. | ||||||||
Требуется больше места для хранения | Требуется меньше места для хранения | ||||||||
Поскольку результат является точным, вы можете использовать их проверки на равенство (операторы = &), округление чисел и т. д. Пока результат остается в пределах допустимого максимального и минимального значений. | Избегайте использования проверок на равенство с плавающей запятой (операторы = и), округления чисел и т. д. Кроме того, избегайте их использования в таких приложениях, как финансовые приложения, где важна точность Например, тип данных decimal(9,2) занимает 5 байт памяти, но может хранить от -9999999,99 до 9999999,99. Типы данных Int занимают 4 байта и могут хранить числа от -2 147 483 648 до 2 147 483 647. Но мы не можем использовать его для хранения дробей. 4 байта числа с плавающей запятой (тип данных Real, 32-битный формат одинарной точности) может хранить значение от -340 000 000 000 000 000 000 000 000 000 000 000 000 до 340 000 000 000 000 000 000 000 000,000.000. Потеря точностиБольшое число при меньшем объеме памяти, чем может обрабатывать число с плавающей запятой, достигается ценой точности. Сначала создайте таблицу со столбцом с плавающей запятой
Теперь вставьте сумму .1 + .2 в этот столбец. Мы используем функцию CAST для приведения чисел к плавающей, чтобы SQL-сервер выполнял арифметику с плавающей запятой.
Запросите и проверьте, вставлено ли значение.
Теперь извлеките число, используя условие where. Запрос не будет получать никаких записей
Это связано с тем, что .1 хранится как примерно | 119384765625 (в 32-бил в одиночестве). Вы можете обратиться к конвертеру