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


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

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

Тип

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

Точность

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

decimal

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

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 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'

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#