Как сделать преобразование типа

Добавил пользователь Евгений Кузнецов
Обновлено: 04.10.2024

Преобразования типов существуют практически во всех языках программирования. В некоторых оно происходит автоматически, в других вручную, а в третьих - частично автоматически, частично вручную. Итак, что же такое преобразование типов?

неявное преобразование (автоматическое) - преобразованием меньше по размеру типа данных в больший: char -> int -> long -> float -> double

явное преобразование (ручное) - обратное предыдущему преобразование большего типа в меньший: double -> float -> long -> int -> char

Неявное преобразование

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


int num = 5;
double dnum = num; // Автоматическое преобразование: int в double

Console.WriteLine(num); // 9
Console.WriteLine(dnum); // 9

Явное преобразование

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


double dnum = 5.23;
int inum = (int) dnum; // Ручное преобразование: double в int

Console.WriteLine(dnum); // 9.78
Console.WriteLine(inum); // 9 - остается только целая часть, дробная отбрасывается

Convert.ToInt32 (int) // в тип int
Convert.ToInt64 (long) // в тип long
Convert.ToDouble // в тип double
Convert.ToBoolean // в тип boolean
Convert.ToString // в строку

Примеры использования класса Convert

int inum = 10;
double dnum = 5.25;
bool boolValue = true;

Console.WriteLine(Convert.ToString(inum)); // int в string
Console.WriteLine(Convert.ToDouble(inum)); // int в double
Console.WriteLine(Convert.ToInt32(dnum)); // double в int
Console.WriteLine(Convert.ToString(boolValue)); // bool в strin


Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

Комментарии ( 0 ):

Функция Number() преобразует в тип Number, String() в тип String, Boolean() в тип Boolean.

Типы данных в JavaScript

В JavaScript существует 5 типов данных, которые могут содержать значения:

Есть 3 типа объектов:

И 2 типа данных, которые не могут содержать значения:

Оператор typeof

Чтобы определить тип переменной JavaScript, используется оператор typeof.

  • У NaN тип number
  • У массива тип object
  • У даты тип object
  • У null тип object
  • У неопределенной переменной тип undefined *
  • У переменной, которой не присвоено значение, тоже тип undefined *

Нельзя при помощи оператора typeof определить, является ли объект JavaScript массивом (или датой).

Оператор typeof это не переменная. Это оператор. У операторов ( + - * / ) нет типов. Однако оператор typeof всегда возвращает строку (содержащую тип операнда).

Свойство constructor

Свойство constructor возвращает функцию-конструктор у всех переменных JavaScript.

Вы можете проверить свойство constructor, чтобы определить, является ли объект массивом (содержит слово "Array"):

Или еще проще, вы можете проверить, является ли объект функцией Array:

Аналогичным образом можно проверить является ли переменная объектом Date.

Преобразование типов в JavaScript

Переменные JavaScript могут быть преобразованы в новые переменные и другие типы данных:

  • при помощи функции JavaScript
  • автоматически самим JavaScript

Преобразование чисел в строки

Глобальный метод String() позволяет преобразовывать числа в строки.

Его можно использовать с любыми видами чисел — константами, переменными или выражениями:

Метод toString() объекта Number делает то же самое.

В главе Методы объекта Number вы найдете другие методы, которые можно использовать для преобразования чисел в строки:

МетодОписание
toExponential()Возвращает строку с округленным числом, записанным в экспоненциальной нотации.
toFixed()Возвращает строку с числом, записанным с заданным количеством цифр после десятичной точки.
toPrecision()Возвращает строку с числом заданной длины.

Преобразование логических значений (тип Boolean) в строку

Глобальный метод String() позволяет преобразовывать логические значения в строки.

Метод toString() объекта Boolean делает то же самое.

Преобразование даты (тип Date) в строку

Глобальный метод String() позволяет преобразовывать дату (тип Date) в строку.

Метод toString() объекта Date делает то же самое.

В главе Методы объекта Date вы найдете другие методы, которые можно использовать для преобразования даты в строку:

МетодОписание
getFullYear()Получить год в формате четырех цифр (гггг)
getMonth()Получить номер месяца (0-11)
getDate()Получить число месяца (1-31)
getHours()Получить час (0-23)
getMinutes()Получить минуты (0-59)
getSeconds()Получить секунды (0-59)
getMilliseconds()Получить миллисекунды (0-999)
getTime()Получить время (количество миллисекунд, прошедших с 1 января 1970)
getDay()Получить номер дня недели (0-6)

Преобразование строк в числа

Глобальный метод Number() позволяет преобразовывать строки в числа.

Строки, содержащие числа (как "3.14"), преобразовываются в числа (как 3.14). Пустые строки преобразовываются в 0. Все остальные строки преобразовываются в NaN (Не число).

В главе Методы объекта Number вы найдете другие методы, которые можно использовать для преобразования строк в числа:

МетодОписание
parseFloat()Парсит строку и возвращает число с плавающей точкой.
parseInt()Парсит строку и возвращает целое число.

Унарный оператор +

Унарный оператор + также можно использовать для преобразования переменных в числовой тип:

Если переменная не может быть преобразована, то она все равно станет числом, но со значением NaN (Не число):

Преобразование логических значений (тип Boolean) в число

Глобальный метод Number() позволяет преобразовывать логические значения в числа.

Преобразование даты (тип Date) в число

Глобальный метод Number() позволяет преобразовывать значения даты (тип Date) в числа.

Метод getTime() объекта Date делает то же самое.

Автоматическое преобразование типов

Когда JavaScript приходится оперировать с "неправильным" типом данных, интерпретатор попытается преобразовать тип этого значения в "правильный".

Результат получается не всегда таким, как вы ожидаете:

Автоматическое преобразование строк

JavaScript автоматически вызывает метод переменной toString(), когда вы пытаетесь "вывести" объект или переменную:

Числа и логические значения также преобразуются, но это не так заметно:

Таблица преобразования типов JavaScript

В следующей таблице показаны результаты преобразования различных значений JavaScript в типы Number, String и Boolean:

Помимо операций присваивания, преобразование типов происходит и в самих выражениях. В выражении можно свободно смешивать два или более типа данных, при условии их совместимости друг с другом. Например, в одном выражении допускается применение типов short и long , поскольку оба типа являются числовыми. Когда в выражении смешиваются разные типы данных, они преобразуются в один и тот же тип по порядку следования операций.

ЕСЛИ один операнд имеет тип decimal , ТО и второй операнд продвигается к типу decimal (но если второй операнд имеет тип float или double , результат будет ошибочным).

ЕСЛИ один операнд имеет тип double , ТО и второй операнд продвигается к типу double .

ЕСЛИ один операнд имеет тип float , ТО и второй операнд продвигается к типу float .

ЕСЛИ один операнд имеет тип ulong , ТО и второй операнд продвигается к типу ulong (но если второй операнд имеет тип sbyte , short , int или long , результат будет ошибочным).

ЕСЛИ один операнд имеет тип long , ТО и второй операнд продвигается к типу long .

ЕСЛИ один операнд имеет тип uint , а второй — тип sbyte , short или int , ТО оба операнда продвигаются к типу long .

ЕСЛИ один операнд имеет тип uint , ТО и второй операнд продвигается к типу uint .

ИНАЧЕ оба операнда продвигаются к типу int .

Относительно правил продвижения типов необходимо сделать ряд важных замечаний. Во-первых, не все типы могут смешиваться в выражении. В частности, неявное преобразование типа float или double в тип decimal невозможно, как, впрочем, и смешение типа ulong с любым целочисленным типом со знаком. Для смешения этих типов требуется явное их приведение.

Во-вторых, особого внимания требует последнее из приведенных выше правил. Оно гласит: если ни одно из предыдущих правил не применяется, то все операнды продвигаются к типу int . Следовательно, все значения типа char , sbyte , byte , ushort и short продвигаются к типу int в целях вычисления выражения. Такое продвижение типов называется целочисленным. Это также означает, что результат выполнения всех арифметических операций будет иметь тип не ниже int .

Следует иметь в виду, что правила продвижения типов применяются только к значениям, которыми оперируют при вычислении выражения. Так, если значение переменной типа byte продвигается к типу int внутри выражения, то вне выражения эта переменная по-прежнему относится к типу byte . Продвижение типов затрагивает только вычисление выражения.

Но продвижение типов может иногда привести к неожиданным результатам. Если, например, в арифметической операции используются два значения типа byte , то происходит следующее. Сначала операнды типа byte продвигаются к типу int . А затем выполняется операция, дающая результат типа int . Следовательно, результат выполнения операции, в которой участвуют два значения типа byte , будет иметь тип int . Но ведь это не тот результат, который можно было бы с очевидностью предположить. Рассмотрим следующий пример программы.

Аналогичная ситуация возникает при выполнении операций с символьными операндами. Например, в следующем фрагменте кода требуется обратное приведение к типу char , поскольку операнды ch1 и сh2 в выражении продвигаются к типу int .

Без приведения типов результат сложения операндов ch1 и сh2 будет иметь тип int , и поэтому его нельзя присвоить переменной типа char .

Продвижение типов происходит и при выполнении унарных операций, например с унарным минусом. Операнды унарных операций более мелкого типа, чем int ( byte , sbyte , short и ushort ), т.е. с более узким диапазоном представления чисел, продвигаются к типу int . То же самое происходит и с операндом типа char . Кроме того, если выполняется унарная операция отрицания значения типа uint , то результат продвигается к типу long .

Преобразование типа double в тип int выполнялось в выделенной строке (строке с номером 16). Если вы соберете данный пример и запустите его, то увидите, что преобразование типов прошло, т.е. из числа с плавающей точкой мы получили целое число.

Так же, для преобразования данных из одного типа в другой, есть целый класс с именем Convert, у которого имеются специальные методы. Ниже, в таблице, представлены основные методы этого класса.

Название метода Целевой тип
ToBoolean bool
ToByte byte
ToChar char
ToDouble double
ToSingle float
ToInt32 int
ToInt64 long
ToString string

А теперь, пример использования класса Convert и его методов:

Как видите, это практически тот же код, что был в первом примере, но с использованием другого подхода в преобразовании типов.

И обратите внимание на еще одни момент, если один тип нельзя преобразовать в другой, а вы это попытаетесь сделать, то получите ошибку в программе!

Пользоваться возможность преобразования типов вам придется довольно часто!

Читайте также: