decimal (Справочник по C#)
Ключевое слово decimal обозначает 128-разрядный тип данных.По сравнению с типом данных с плавающей запятой, тип decimal имеет более точный и узкий диапазон, благодаря чему он походит для финансовых расчетов.В следующей таблице представлен приблизительный диапазон и точность для типа decimal.
Тип |
Приблизительный диапазон |
Точность |
Тип платформы .NET Framework |
---|---|---|---|
decimal |
(от -7,9 x 1028 до 7,9 x 1028) / (100–28) |
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 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#
Строки стандартных числовых форматов