decimal (Справочник по C#)
Обновлен: Ноябрь 2007
Ключевое слово decimal обозначает 128-разрядный тип данных. По сравнению с типом данных с плавающей запятой, тип decimal имеет более точный и узкий диапазон, благодаря чему он походит для финансовых расчетов. В следующей таблице представлен приблизительный диапазон и точность для типа decimal.
Тип |
Приблизительный диапазон |
Точность |
Тип платформы .NET Framework |
---|---|---|---|
decimal |
от ±1,0 × 10−28 до ±7,9 × 1028 |
28-29 значимых цифр |
Литералы
Если необходимо, чтобы числовой фактический литерал рассматривался как decimal, используйте суффикс m или M, например:
decimal myMoney = 300.5m;
Если суффикс m отсутствует, число рассматривается как double и возникает ошибка компилятора.
Преобразования
Целые типы неявно преобразуются в decimal и результатом является decimal. Инициализацию десятичной переменной можно выполнить следующим образом с помощью целочисленного литерала без суффикса.
decimal myMoney = 300;
Для типов с плавающей запятой и типа decimal отсутствует неявное преобразование, поэтому для преобразования между этими двумя типами следует использовать приведение. Пример.
decimal myMoney = 99.9m;
double x = (double)myMoney;
myMoney = (decimal)x;
В одном выражении можно использовать decimal вместе с целочисленными типами числовых данных. Однако сочетание decimal и типов с плавающей запятой вызовет ошибку компиляции.
Дополнительные сведения о неявных числовых преобразованиях см. в разделе Таблица неявных числовых преобразований (Справочник по C#).
Дополнительные сведения о явных числовых преобразованиях см. в разделе Таблица явных числовых преобразований (справочник по C#).
Форматирование десятичных выводных данных
Для форматирования результатов можно воспользоваться методом String.Format или методом Console.Write, вызывающим String.Format(). Формат денежных единиц задается с помощью стандартной строки формата денежных единиц "C" или "c", как показано во втором примере далее в этой статье. Дополнительные сведения о методе String.Format см. в разделе String.Format.
Пример
В этом примере decimal и int находятся в одном выражении. В результате возвращается тип decimal.
В следующем примере используется оператор, предпринимающий попытку добавления переменных double и decimal.
double x = 9;
Console.WriteLine(d + x); // Error
В результате выдается следующее сообщение об ошибке.
Operator '+' cannot be applied to operands of type 'double' and 'decimal'
public class TestDecimal
{
static void Main()
{
decimal d = 9.1m;
int y = 3;
Console.WriteLine(d + y); // Result converted to decimal
}
}
// Output: 12.1
В этом примере для форматирования выходных данных используется строка формата денежных единиц. Обратите внимание на округление x, поскольку десятичные разряды превышают 0,99$. Переменная y, представляющая максимально точные цифры, отображается исключительно в правильном формате.
public class TestDecimalFormat
{
static void Main()
{
decimal x = 0.999m;
decimal y = 9999999999999999999999999999m;
Console.WriteLine("My amount = {0:C}", x);
Console.WriteLine("Your amount = {0:C}", y);
}
}
/* Output:
My amount = $1.00
Your amount = $9,999,999,999,999,999,999,999,999,999.00
*/
Спецификация языка C#
Дополнительные сведения см. в следующих разделах документа Спецификация языка C#:
1.3 Типы и переменные
4.1.7 Тип decimal
См. также
Основные понятия
Руководство по программированию в C#
Ссылки
Таблица целых типов (Справочник по C#)
Таблица встроенных типов (Справочник по C#)
Таблица неявных числовых преобразований (Справочник по C#)
Таблица явных числовых преобразований (справочник по C#)