Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Числовые типы с плавающей запятой представляют реальные числа. Все числовые типы с плавающей запятой являются типами значений. Они также являются простыми типами и могут быть инициализированы с помощью литерала. Все числовые типы с плавающей запятой поддерживают арифметические операторы, сравнения и равенства .
Характеристики типов с плавающей запятой
C# поддерживает следующие предопределенные типы с плавающей запятой:
| Тип/ключевое слово C# | Приблизительный диапазон | Точность | Размер | Тип .NET |
|---|---|---|---|---|
float |
±1.5 x 10–45 до ±3.4 x 1038 | ~6-9 цифр | 4 байта | System.Single |
double |
±5.0 × 10–324 до ±1.7 × 10308 | ~15-17 цифр | 8 байт | System.Double |
decimal |
±1.0 x 10-28 до ±7.9228 x 1028 | 28-29 цифр | 16 байт | System.Decimal |
В предыдущей таблице каждое ключевое слово типа C# из левого столбца является псевдонимом соответствующего типа .NET. Они взаимозаменяемы. Например, следующие объявления объявляют переменные одного типа:
double a = 12.3;
System.Double b = 12.3;
Значение по умолчанию каждого типа с плавающей запятой равно нулю. 0 Каждый из типов с плавающей запятой имеет MinValue и MaxValue константы, обеспечивающие минимальное и максимальное конечное значение этого типа.
float
double Типы также предоставляют константы, представляющие значения без числа и бесконечности. Например, double тип предоставляет следующие константы: Double.NaN, Double.NegativeInfinityи Double.PositiveInfinity.
Тип decimal подходит, если требуемая степень точности определяется числом цифр справа от десятичной запятой. Такие цифры обычно используются в финансовых приложениях, для денежных сумм (например, $1,00), процентных ставок (например, 2,625%) и т. д. Даже числа, точные только к одной десятичной цифре, обрабатываются более точно decimal типом: 0,1, например, может быть точно представлен decimal экземпляром, а doublefloat экземпляр не представляет 0,1. Из-за этого различия в числовых типах непредвиденные ошибки округления могут возникать при арифметических вычислениях при использовании double или float для десятичных данных. Вы можете использовать double вместо decimal оптимизации производительности, чем обеспечить точность. Однако любая разница в производительности будет не замечена всеми, но самыми интенсивными приложениями. Еще одна возможная причина, по которой следует избежать decimal , заключается в минимизации требований к хранилищу. Например, ML.NET используется float , так как разница между 4 байтами и 16 байтами добавляется для очень больших наборов данных. Дополнительные сведения см. в разделе System.Decimal.
Вы можете смешивать целые типы и floatdouble типы в выражении. В этом случае целочисленные типы неявно преобразуются в один из типов с плавающей запятой и, при необходимости, float тип неявно преобразуется в double. Выражение вычисляется следующим образом:
- Если в выражении есть
doubleтип, выражение оценивается какdoubleboolреляционные, так и сравнения равенства. - Если в выражении нет
doubleтипа, выражение оценивается какfloatboolреляционные, так и сравнения равенства.
Вы также можете смешивать целые типы и decimal тип в выражении. В этом случае целочисленные типы неявно преобразуются в decimal тип, и выражение оценивается в booldecimalили в реляционных и сравнениях равенства.
Нельзя смешивать decimal тип с float типом и double типами в выражении. В этом случае, если вы хотите выполнить арифметические операции, сравнения или равенства, необходимо явно преобразовать операнды из типа или decimal в тип, как показано в следующем примере:
double a = 1.0;
decimal b = 2.1m;
Console.WriteLine(a + (double)b);
Console.WriteLine((decimal)a + b);
Для форматирования значения с плавающей запятой можно использовать строки стандартного числового формата или пользовательские строки числового формата .
Реальные литералы
Тип реального литерала определяется суффиксом следующим образом:
- Литерал без суффикса или суффикса
dDимеет типdouble - Литерал с суффиксом
fFтипаfloat - Литерал с суффиксом
mMтипаdecimal
В следующем коде показан пример каждого из них:
double d = 3D;
d = 4d;
d = 3.934_001;
float f = 3_000.5F;
f = 5.4f;
decimal myMoney = 3_000.5m;
myMoney = 400.75M;
В предыдущем примере также показано использование _ в качестве разделителя цифр. Вы можете использовать разделитель цифр со всеми типами числовых литералов.
Вы также можете использовать научные нотации, то есть указать экспонентную часть реального литерала, как показано в следующем примере:
double d = 0.42e2;
Console.WriteLine(d); // output 42
float f = 134.45E-2f;
Console.WriteLine(f); // output: 1.3445
decimal m = 1.5E6m;
Console.WriteLine(m); // output: 1500000
Преобразования
Существует только одно неявное преобразование между числовыми типами с плавающей запятой: от float до double. Однако можно преобразовать любой тип с плавающей запятой в любой другой тип с плавающей запятой с явным приведением. Дополнительные сведения см. в разделе "Встроенные числовые преобразования".
Спецификация языка C#
Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#:
- Типы с плавающей запятой
- Десятичный тип
- Реальные литералы
См. также
- типы значений
- Целочисленные типы
- Стандартные строки числового формата
- Числовые значения в .NET
- System.Numerics.Complex