Поделиться через


Преобразования из типов с плавающей запятой

Значение float, преобразованное в double или long double, либо значение double, преобразованное в long double, не меняется. Значение double, преобразованное в значение float, по возможности представляется в точности. Точность может быть потеряна, если значение невозможно представить в точности. Если результат выходит за пределы диапазона, поведение не определено. Диапазон типов с плавающей запятой см. в разделе Ограничения констант с плавающей запятой.

Для преобразования значения с плавающей запятой в целочисленное значение сначала следует преобразовать его в значение long, а затем из значения long — в определенное целочисленное значение. Дробная часть значения с плавающей запятой игнорируется при преобразовании в значение long. Если результат по-прежнему слишком большой для представления в качестве значения long, результат преобразования не определен.

Блок, относящийся только к системам Microsoft

При преобразовании числа с плавающей запятой double или long double в меньшее число с плавающей запятой дробная часть значения переменной с плавающей запятой отбрасывается, если происходит потеря точности. При переполнении возникает ошибка времени выполнения. Обратите внимание, что компилятор Microsoft C сопоставляет long double с типом double.

Завершение блока, относящегося только к системам Microsoft

В следующей таблице перечислены преобразования из типов с плавающей запятой.

Преобразования из типов с плавающей запятой

Исходный тип

Целевой тип

Метод

float

char

Преобразование в значение long; преобразование значения long в char

float

short

Преобразование в значение long; преобразование значения long в short

float

long

Усечение до десятичной запятой. Если результат слишком большой для представления в качестве значения long, результат не определен.

float

unsigned short

Преобразование в значение long; преобразование значения long в unsigned short

float

unsigned long

Преобразование в значение long; преобразование значения long в unsigned long

float

double

Изменение внутреннего представления

float

long double

Изменение внутреннего представления

double

char

Преобразование в значение float; преобразование значения float в char

double

short

Преобразование в значение float; преобразование значения float в short

double

long

Усечение до десятичной запятой. Если результат слишком большой для представления в качестве значения long, результат не определен.

double

unsigned short

Преобразование в значение long; преобразование значения long в unsigned short

double

unsigned long

Преобразование в значение long; преобразование значения long в unsigned long

double

float

Представление в качестве значения float. Если значение double невозможно представить в точности как значение float, происходит потеря точности. Если значение слишком большое для представления в качестве значения float, результат не определен.

long double

char

Преобразование в значение float; преобразование значения float в char

long double

short

Преобразование в значение float; преобразование значения float в short

long double

long

Усечение до десятичной запятой. Если результат слишком большой для представления в качестве значения long, результат не определен.

long double

unsigned short

Преобразование в значение long; преобразование значения long в unsigned short

long double

unsigned long

Преобразование в значение long; преобразование значения long в unsigned long

long double

float

Представление в качестве значения float. Если значение double невозможно представить в точности как значение float, происходит потеря точности. Если значение слишком большое для представления в качестве значения float, результат не определен.

long double

double

Значение long double обрабатывается как double.

Преобразования из значения float, double или long double в unsigned long не точные, если преобразуемое значение больше максимального положительного значения long.

См. также

Основные понятия

Преобразования назначений