decimal (Справочник по C#)

Ключевое слово decimal обозначает 128-разрядный тип данных. По сравнению с типами данных с плавающей запятой, диапазон значений типа decimal меньше, а точность выше, благодаря чему этот тип подходит для финансовых расчетов. В следующей таблице представлен приблизительный диапазон значений и точность для типа decimal.

Тип

Приблизительный диапазон значений

Точность

Тип платформы .NET Framework

decimal

(От -7,9 x 1028 до 7,9 x 1028) / (100–28)

28–29 значащих цифр

Decimal

Литералы

Если требуется, чтобы числовой действительный литерал рассматривался как 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.

Пример

В следующем примере возникает ошибка компилятора при попытке сложить переменные типа double и decimal.

double dub = 9;
// The following line causes an error that reads "Operator '+' cannot be applied to 
// operands of type 'double' and 'decimal'"
Console.WriteLine(dec + dub); 

// You can fix the error by using explicit casting of either operand.
Console.WriteLine(dec + (decimal)dub);
Console.WriteLine((double)dec + dub);

В результате выводится следующее сообщение об ошибке:

Operator '+' cannot be applied to operands of type 'double' and 'decimal'

В следующем примере в одном выражении используются переменные типов decimal и int. В результате возвращается тип 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#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.

См. также

Ссылки

Ключевые слова C#

Таблица целых типов (Справочник по C#)

Таблица встроенных типов (Справочник по C#)

Таблица неявных числовых преобразований (Справочник по C#)

Таблица явных числовых преобразований (Справочник по C#)

Decimal

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

Руководство по программированию на C#

Строки стандартных числовых форматов

Другие ресурсы

Справочник по C#