Поделиться через


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

Обновлен: Ноябрь 2007

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

Тип

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

Точность

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

decimal

от ±1,0 × 10−28 до ±7,9 × 1028

28-29 значимых цифр

System.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.

Пример

В этом примере 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#)

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

Decimal

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

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