Полное руководство. С# 4.0 - Шилдт Герберт
Таблица 21.6. Поля, поддерживаемые структурой DoubleПолеНазначениеpublic const double EpsilonНаименьшее ненулевое положительное значениеpublic const double MaxValueНаибольшее значение, допустимое для данных типа doublepublic const double MinValueНаименьшее значение, допустимое для данных типа doublepublic const double NaNЗначение, не являющееся числомpublic const double NegativeInfinityЗначение, представляющее минус бесконечностьpublic const double PositiveInfinityЗначение, представляющее плюс бесконечностьСтруктура Decimal
Структура Decimal немного сложнее, чем ее аналоги для целочисленных типовданных, а также типов данных с плавающей точкой. Она содержит немало конструкторов, полей, методов и операторов, способствующих использованию типа decimalвместе с другими числовыми типами, поддерживаемыми в С#. Так, целый ряд методов из этой структуры обеспечивает преобразование типа decimal в другие числовыетипы.
В структуре Decimal определено восемь открытых конструкторов. Ниже приведены шесть наиболее часто используемых из них.public Decimal(int значение)public Decimal(uint значение)public Decimal(long значение)public Decimal(ulong значение)public Decimal(float значение)public Decimal(double значение)
Каждый из этих конструкторов создает объект типа Decimal из значения указанного типа.
Кроме того, объект типа Decimal может быть создан из отдельно указываемых составляющих с помощью следующего конструктора.public Decimal (int lo, int mid, int hi, bool IsNegative, byte scale)
Десятичное значение состоит из трех частей. Первую часть составляет 96-разрядноецелое значение, вторую — флаг знака, третью — масштабный коэффициент. В частности, 96-разрядное целое значение передается конструктору тремя 32-разряднымифрагментами с помощью параметров lo, mid и hi; знак флага — с помощью параметра IsNegative, причем логическое значение false этого параметра обозначаетположительное число, тогда как логическое значение true обозначает отрицательноечисло; а масштабный коэффициент — с помощью параметра scale, принимающегозначения от 0 до 28. Этот коэффициент обозначает степень числа 10 (т.е. 10scale), на которую делится число для получения его дробной части.
Вместо того чтобы передавать каждую составляющую объекта типа Decimal отдельно, все его составляющие можно указать в массиве, используя следующий конструктор.public Decimal(int[] bits)
Три первых элемента типа int в массиве bits содержат 96-разрядное целое значение; 31-й разряд содержимого элемента bits[3] обозначает флаг знака (0 — положительное число, 1 — отрицательное число); а в разрядах 16-23 содержится масштабныйкоэффициент.
В структуре Decimal реализуются следующие интерфейсы: IComparable,IComparable<decimal>, IConvertible, IFormattable, IEquatable<decimal>,а также IDeserializationCallback.
В приведенном ниже примере программы значение типа decimal формируетсявручную.// Сформировать десятичное число вручную.using System;class CreateDec { static void Main() { decimal d = new decimal(12345, 0, 0, false, 2); Console.WriteLine(d); }}
Эта программа дает следующий результат.123.45
В данном примере значение 96-разрядного целого числа равно 12345. У него положительный знак и два десятичных разряда в дробной части.
Методы, определенные в структуре Decimal, приведены в табл. 21.7, а поля —в табл. 21.8. Кроме того, в структуре Decimal определяется обширный ряд операторови преобразований, позволяющих использовать десятичные значения вместе со значениями других типов в выражениях. Правила, устанавливающие порядок присваиваниядесятичных значений и их применения в выражениях, представлены в главе 3.
Таблица 21.7. Методы, определенные в структуре DecimalМетодНазначениеpublic static decimal Add(decimal d1, decimal d2)Возвращает значение d1 + d2public static decimal Ceiling(d)Возвращает наименьшее целое, которое представлено в виде значения типа decimal и не меньше d. Так, если d равно 1,02, метод Ceiling() возвращает значение 2,0. А если d равно -1,02, то метод Ceiling() возвращает значение -1public static int Compare(decimal d1, decimal d2)Сравнивает числовое значение d1 со значением d2. Возвращает нуль, если сравниваемые значения равны; отрицательное значение, если d1 меньше d2; и, наконец, положительное значение, если d1 больше d2public int CompareTo(object value)Сравнивает числовое значение вызывающего объекта со значением value. Возвращает нуль, если сравниваемые значения равны; отрицательное значение, если вызывающий объект имеет меньшее значение; и, наконец, положительное значение, если вызывающий объект имеет большее значениеpublic int CompareTo(decimal value)Сравнивает числовое значение вызывающего объекта со значением value. Возвращает нуль, если сравниваемые значения равны; отрицательное значение, если вызывающий объект имеет меньшее значение; и, наконец, положительное значение, если вызывающий объект имеет большее значениеpublic static decimal Divide(decimal d1, decimal d2)Возвращает частное от деления d1 / d2public bool Equals(decimal value)Возвращает логическое значение true, если значение вызывающего объекта равно значению valuepublic override bool Equals(object value)Возвращает логическое значение true, если значение вызывающего объекта равно значению valuepublic static bool Equals(decimal d1, decimal d2)Возвращает логическое значение true, если если d1 равно d2public static decimal Floor (decimal d)Возвращает наибольшее целое, которое представлено в виде значения типа decimal и не больше d Так, если d равно 1,02, метод Floor() возвращает значение 1,0. А если d равно -1,02, метод Floor() возвращает значение -2public static decimal FromOACurrency(long cy)Преобразует значение су из формата денежной единицы, применяемого в компоненте OLE Automation, в его десятичный эквивалент и возвращает полученный результатpublic static int[] GetBits(decimal d)Возвращает двоичное представление значения d в виде массива типа int. Организация этого массива описана в тексте настоящего разделаpublic override int GetHashCode()Возвращает хеш-код для вызывающего объектаpublic TypeCode GetTypeCode()Возвращает значение из перечисления TypeCode для структуры Decimal, т.е. TypeCode.Decimalpublic static decimal Multiply(decimal d1, decimal d2)Возвращает произведение d1 * d2public static decimal Negate(decimal d)Возвращает значение -dpublic static decimal Parse(string s)Возвращает двоичный эквивалент числа, заданного в виде символьной строки s. Если в строке не представлено числовое значение типа decimal, то генерируется исключениеpublic static decimal Parse(string s, IFormatProvider provider)Возвращает двоичный эквивалент числа, заданного в виде символьной строки s, с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider. Если в строке не представлено числовое значение типа decimal, то генерируется исключениеpublic static decimal Parse (string s, NumberStyles styles)Возвращает двоичный эквивалент числа, заданного в виде символьной строки s, с использованием данных о стилях, определяемых параметром styles. Если в строке не представлено числовое значение типа decimal, то генерируется исключениеpublic static decimal Parse (string s, NumberStyles styles, IformatProvider provider)Возвращает двоичный эквивалент числа, заданного в виде символьной строки s, с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider, а также данных о стилях, обозначаемых параметром styles. Если в строке не представлено числовое значение типа decimal, то генерируется исключениеpublic static decimal Remainder(decimal d1, decimal d2)Возвращает остаток от целочисленного деления d1 / d2public static decimal Round(decimal d)Возвращает значение d, округленное до ближайшего целого числаpublic static decimal Round(decimal d, int decimals)Возвращает значение d, округленное до числа с количеством цифр в дробной части, равным значению параметра decimals, которое должно находиться в пределах от 0 до 28public static decimal Round(decimal d, MidPoihtRounding mode)Возвращает значение d, округленное до ближайшего целого числа в режиме, определяемом параметром mode. Режим округления применяется лишь в том случае, если значение d оказывается посредине между двумя целыми числамиpublic static decimal Round(decimal d, int decimals, MidPointRounding mode)Возвращает значение d, округленное до числа с количеством цифр в дробной части, равным значению параметра decimals, которое должно находиться в пределах от 0 до 28, а параметр mode определяет режим округления. Режим округления применяется лишь в том случае, если значение d оказывается посредине между двумя округляемыми числамиpublic static decimal Subtract(decimal d1, decimal d2)Возвращает разность d1 - d2public static byte ToByte(decimal value)Возвращает эквивалент значения value типа byte. Дробная часть отбрасывается. Если значение value оказывается вне диапазона представления чисел для типа byte, то генерируется исключение OverflowExceptionpublic static double ToDouble(decimal d)Возвращает эквивалент значения d типа double. При этом возможна потеря точности, поскольку у значения типа double меньше значащих цифр, чем у значения типа decimalpublic static short ToInt16(decimal d)Возвращает эквивалент значения d типа short. Дробная часть отбрасывается. Если значение d оказывается вне диапазона представления чисел для типа short, то генерируется исключение OverflowExceptionpublic static int ToInt32(decimal d)Возвращает эквивалент значения d типа int. Дробная часть отбрасывается. Если значение d оказывается вне диапазона представления чисел для типа int, то генерируется исключениеOverflowException public static long ToInt64(decimal d)Возвращает эквивалент значения d типа long. Дробная часть отбрасывается. Если значение d оказывается вне диапазона представления чисел для типа long, то генерируется исключение OverflowExceptionpublic static long ToOACurrency(decimal value)Преобразует значение value в его эквивалент формата денежной единицы, применяемого в компоненте OLE Automation, и возвращает полученный результатpublic static sbyte ToSByte(decimal value)Возвращает эквивалент значения value типа sbyte. Дробная часть отбрасывается. Если значение value оказывается вне диапазона представления чисел для типа sbyte, то генерируется исключение OverflowExceptionpublic static float ToSingle(decimal d)Возвращает эквивалент значения d типа float. Дробная часть отбрасывается. Если значение d оказывается вне диапазона представления чисел для типа float, то генерируется исключение OverflowExceptionpublic override string ToString()Возвращает строковое представление значения вызывающего объекта в используемом по умолчанию форматеpublic string ToString(string format)Возвращает строковое представление значения вызывающего объекта, как указано в форматирующей строке, определяемой параметром formatpublic string ToString(IFormatProvider provider)Возвращает строковое представление значения вызывающего объекта с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром providerpublic string ToString(string format, IFormatProvider provider)Возвращает строковое представление значения вызывающего объекта, как указано в форматирующей строке, определяемой параметром format, но с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром providerpublic static ushort ToUInt16(decimal value)Возвращает эквивалент значения value типа ushort. Дробная часть отбрасывается. Если значение value оказывается вне диапазона представления чисел для типа ushort, то генерируется исключение OverflowExceptionpublic static uint ToUInt32(decimal d)Возвращает эквивалент значения d типа uint. Дробная часть отбрасывается. Если значение d оказывается вне диапазона представления чисел для типа uint, то генерируется исключение OverflowExceptionpublic static ulong ToUInt64(decimal d)Возвращает эквивалент значения d типа ulong. Дробная часть отбрасывается. Если значение d оказывается вне диапазона представления чисел для типа ulong, то генерируется исключение OverflowExceptionpublic static decimal Truncate(decimal d)Возвращает целую часть числа d. Дробная часть отбрасываетсяpublic static bool TryParse(string s, out decimal result)Предпринимает попытку преобразовать числовое значение, заданное в виде символьной строки s, в значение типа decimal. При успешной попытке это значение сохраняется в параметре result и возвращается логическое значение true. В противном случае возвращается логическое значение false, в отличие от метода Parse(), который генерирует исключение при неудачном исходе преобразованияpublic static bool TryParse(string s, NumberStyles styles, IFormatProvider provider, out decimal result)Предпринимает попытку преобразовать числовое значение, заданное в виде символьной строки s, в значение типа decimal, как указано в форматирующей строке, определяемой параметром format, но с использованием форматов данных, характерных для конкретной культурной среды и определяемых параметром provider, а также сведений о стилях, обозначаемых параметром styles. При успешной попытке это значение сохраняется в параметре result и возвращается логическое значение true. В противном случае возвращается логическое значение false, в отличие от метода Parse(), который генерирует исключение при неудачном исходе преобразования