C# является строго типизированным языком. В языках такого типа каждая переменная и константа имеет свой тип, результатом вычисления которого является некое значение. В стандартной библиотеке классов .NET определены встроенные числовые типы и комплексные типы. Об особенностях применения этих разных типов данных мы и поговорим в этой обзорной статье.
Содержание статьи:
1 Введение
1.1 Подразделение типов значения
1.2 Подразделение ссылочных типов
2. Использование суффиксов float, decimal, double
2.1 С# decimal VS double
2.2 Литералы
3. Decimal и float
4. C# convert to decimal
5. C# decimal to int
6. C# decimal round
7. Таблица некоторых типов C# и их сочетание с системными типами
8. Неявная типизация
9. Double или decimal?
9.1 Таблица различий между double и decimal
10 Итог
Типы данных используются для управления переменными. Каждый из типов данных обрабатывается в соответствии с определенными правилами. Поскольку C# — язык со строгой типизацией, то абсолютно все выполняемые операции проверяются на соответствие типов (во избежание ошибок производится их предварительный контроль). Если какая-либо операция с типами недопустима, итоговая программа не будет скомпилирована. По сути, разработка программного обеспечения на C# представляет собой создание и организацию взаимодействия между различными типами данных.
В языке C# типы данных имеют две категории:
byte
, sbyte
, short
, ushort
, int
, uint
, long
, ulong
);float
, double
);C# decimal
;Bool
;Char
;enum
;Struct
.Object
;String
;Class
;Interface
;Delegate
.У некоторых числовых типов имеются суффиксы, позволяющие записывать значение типа в переменную.
Числовые типы с плавающей запятой — это действительные числа. Они принадлежат к категории Типы значения. Это простые типы, которые могут быть инициализированы литералами. Они поддерживают операторы сравнения, равенства и арифметические операторы.
Тип C# | Диапазон | Точность/Знаков после запятой | Размер/байт | Системный тип |
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# взаимозаменяемы с системными типами.
Пример:
double a = 12.3; System.Double b = 12.3;
Все типы с плавающей запятой имеют свои константы MaxValue
и MinValue
. Типы float
и double
в дополнение имеют константы, которые обозначают нечисловые и бесконечные значения.
С# decimal format
подходит тогда, когда необходима точность, определяемая числом цифр справа от запятой. Числа с точностью до одной десятичной цифры наиболее точно обрабатывают тип decimal
. В double
или float
в десятичных данных могут возникать ошибки.
В случаях, когда производительность важнее точности, тип decimal
(c# format decimal
) можно заменить типом double
.
Тип определяется суффиксом:
double
имеет суффиксы D
или d
;float
имеет суффиксы F
или f
;decimal
имеет суффиксы M
или m
.Пример:
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;
Decimal
и float
используются для хранения числовых значений:
Float
является 32-битным типом данных с приблизительным числом. Не все значения в диапазоне типов данных могут быть точными, значения округляются;Decimal
является 128-битным типом данных с фиксированной точностью. Все значения в диапазоне типов данных представлены с точностью и масштабом, значения не округляются;Decimal
чаще всего используется в финансовых приложениях, требующих высокой точности без ошибок округления, а float
используется для хранения чисел и повышения производительности.Класс convert
создан для того, чтобы преобразовывать широкий спектр типов. С его помощью можно преобразовывать в десятичное число больше типов. Метод Convert.ToDecimal
используется для преобразования строкового представления числа в эквивалентное десятичное число с информацией о форматировании.
Пример:
// C# program to demonstrate the // Convert.ToDecimal() Method using System; using System.Globalization; class GFG { // Main Method public static void Main() { try { // creating object of CultureInfo CultureInfo cultures = new CultureInfo("en-US"); // declaring and initializing String array string[] values = {"123456789", "12345.6789", "123,456,789.0123"}; // calling get() Method Console.WriteLine("Converted decimal value "+ "of specified strings: "); for (int j = 0; j < values.Length; j++) { get(values[j], cultures); } } catch (FormatException e) { Console.WriteLine("\n"); Console.Write("Exception Thrown: "); Console.Write("{0}", e.GetType(), e.Message); } catch (OverflowException e) { Console.WriteLine("\n"); Console.Write("Exception Thrown: "); Console.Write("{0}", e.GetType(), e.Message); } } // Defining get() method public static void get(string s, CultureInfo cultures) { // converting string to specified char decimal val = Convert.ToDecimal(s, cultures); // display the converted char value Console.Write(" {0}, ", val); } }
Вывод: преобразование в десятичное значение указанных строк:
123456789, 12345.6789, 123456789.0123.
Метод Decimal.ToInt32()
создан для преобразования decimal
значения в эквивалентное 32-разрядное целое число со знаком.
Пример:
/ C# program to demonstrate the // Decimal.ToInt32(Decimal) Method using System; class GFG { // Main Method public static void Main() { try { // Taking decimal variables Decimal dec1 = 2147483647M; Decimal dec2 = 21458565.2996m; // using Decimal.ToInt32(Decimal) Method // Here int means Int32 int val1 = Decimal.ToInt32(dec1); // using Decimal.ToInt32(Decimal) Method // Here int means Int32 int val2 = Decimal.ToInt32(dec2); // Printing the Int32 value Console.WriteLine("The Int32 value " + "is : {0}", val1); // Printing the Int32 value Console.WriteLine("The Int32 value " + "is : {0}", val2); } catch (OverflowException e) { Console.Write("Exception Thrown: "); Console.Write("{0}", e.GetType(), e.Message); } } }
Вывод: Int32: 2147483647
и Int32: 21458565
.
Decimal.Round()
или С# round decimal
представляет собой метод округления к ближайшему целому числу или указанному количеству десятичных знаков.
Существует 4 способа округления:
1Decimal round С#
, то есть десятичный метод — Round(Decimal) Method
— округление десятичного значения до ближайшего целого числа;
Пример:
// C# program to demonstrate the // Decimal.Round(Decimal) Method using System; class GFG { // Main Method public static void Main() { try { // Declaring and initializing value decimal value = 184467440737095.51615M; // getting rounded decimal // using Round() method decimal round = Decimal.Round(value); // Display the value Console.WriteLine("Rounded value is {0}", round); } catch (OverflowException e) { Console.WriteLine("Value must not be out of bound"); Console.Write("Exception Thrown: "); Console.Write("{0}", e.GetType(), e.Message); } } }
Вывод: округленное значение 184467440737096.
2Round(Decimal, Int32) Method
— округление значения Decimal
до указанного количества десятичных знаков;
Пример:
// C# program to demonstrate the // Decimal.Round(Decimal) Method using System; class GFG { // Main Method public static void Main() { try { // Declaring and initializing value decimal value = 7922816251426433759354.39503305M; // getting rounded decimal // using Round() method decimal round = Decimal.Round(value, 4); // Display the value Console.WriteLine("Rounded value is {0}", round); } catch (ArgumentOutOfRangeException e) { Console.WriteLine("decimal place is not within bound"); Console.Write("Exception Thrown: "); Console.Write("{0}", e.GetType(), e.Message); } } }
Вывод: округленное значение 7922816251426433759354,3950
.
3Round(Decimal, Int32, MidpointRounding) Method
;
4Round(Decimal, MidpointRounding) Method
.
Название встроенного типа (столбец Ключевое слово) — и есть сокращенное обозначение системного типа (столбец Системный тип).
Ключевое слово | Системный тип | Описание и диапазон значений | Размер |
byte | System.Byte | Структура. Целое число 0…255. | 1 байт |
sbyte | System.SByte | Структура. Целое число -128…127. | 1 байт |
short | System.Int16 | Структура. Целое число -32768…32767. | 2 байта |
ushort | System.UInt16 | Структура. Целое число 0…65535. | 2 байта |
int | System.Int32 | Структура. Целое число -2147483648…2147483647. | 4 байта |
uint | System.UInt32 | Структура. Целое число 0…4294967295. | 4 байта |
long | System.Int64 | Структура. Целое число –9 223 372 036 854 775 808…9 223 372 036 854 775 807. | 8 байт |
ulong | System.UInt64 | Структура. Целое число 0…18 446 744 073 709 551 615. | 8 байт |
float | System.Single | Структура. Число с плавающей точкой -3.4*1038…3.4*1038 | 4 байта |
double | System.Double | Структура. Число с плавающей точкой ±5.0*10-324…±1.7*10308 | 8 байт |
decimal format c# | System.Decimal | Структура. Десятичное дробное число. Без десятичной запятой ±1.0*10-28…±7.9228*1028, хранит до 28 знаков после запятой. | 16 байт |
bool | System.Boolean | Структура. Хранит логические литералы true или false. | 1 байт |
char | System.Char | Структура. Хранит одиночный символ в Unicode. | 2 байта |
object | System.Object | Класс. Хранит значение любого типа данных. | — |
string | System.String | Класс. Хранит набор символов Unicode. | — |
Чтобы указать призвольный тип переменных, можно использовать неявную типизацию. Для этого используется ключевое слово var
.
Пример:
var hello = "Привет, мир!"; var c = 20; Console.WriteLine(c.GetType().ToString()); Console.WriteLine(hello.GetType().ToString());
Var используется вместо названия типа данных. Присвоенное значение позволяет компилятору выводить тип данных. В примере Console.WriteLine(c.GetType().ToString())
; определяет тип переменной с
. Целочисленные значения по умолчанию рассматриваются как int
, поэтому переменная с
имеет тип System.Int32
.
Но такие переменные имеют свои ограничения:
1Нельзя определить неявную переменную и сразу ее инициализировать.
// верно int a; a = 20; // неверно var c; c = 20;
2Неявная переменная не может иметь значение null
, в этом случае компилятор не определит автоматически тип данных.
// неверно var c=null;
Для больших дробных чисел проще всего использовать тип double
. Decimal
имеет большую разрядность в сравнении с double
, но double
хранит большее значение.
После запятой decimal
может иметь до 28 цифр, тогда как double
— до 16. Тем не менее double
широко используется в математических вычислениях, а decimal
— в финансовых.
Максимальное значение | Минимальное значение | Цифр после запятой | Размер | Количество операций | |
double | ~10308 | ~10-323 | 16 | 8 байт | миллиарды в секунду |
decimal | ~1028 | 10-28 | 28 | 16 байт | сотни миллионов в секунду |
Типы данных могут быть простыми и сложными. Сложные типы чаще всего данные структурируют, а у простых значения данных неделимы. Любой язык программирования имеет систему встроенных типов данных, на их основе можно создавать свои производные.
В C# типы данных подразделяются на две большие группы:
struct
;class
.Закрепить материал по типам C#-данных можно на основе этого замечательного видео, где дополняется все сказаное нами:
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…