Вероятно, самым интересным среди всех числовых типов данных в C# является тип decimal
, который предназначен для применения в финансовых расчетах. Этот тип имеет разрядность 128 бит для представления числовых значений в пределах от 1E-28 до 7,9E+28. Вам, вероятно, известно, что для обычных арифметических вычислений с плавающей точкой характерны ошибки округления десятичных значений. Эти ошибки исключаются при использовании типа decimal
, который позволяет представить числа с точностью до 28 (а иногда и 29) десятичных разрядов. Благодаря тому, что этот тип данных способен представлять десятичные значения без ошибок округления, он особенно удобен для расчетов, связанных с финансами.
Ниже приведен пример программы, в которой тип decimal
используется в конкретном финансовом расчете. В этой программе цена со скидкой рассчитывается на основании исходной цены и скидки в процентах.
// Использовать тип decimal для расчета скидки.
using System;
class UseDecimal {
static void Main() {
decimal price;
decimal discount;
decimal discounted_price;
// Рассчитать цену со скидкой,
price = 19.95m;
discount = 0.15m; // норма скидки составляет 15%
discounted_price = price - (price * discount);
Console.WriteLine("Цена со скидкой: $" + discounted_price);
}
}
Результат выполнения этой программы выглядит следующим образом.
Цена со скидкой: $16.9575
Обратите внимание на то, что значения констант типа decimal
в приведенном выше примере программы указываются с суффиксом m
. Дело в том, что без суффикса m
эти значения интерпретировались бы как стандартные константы с плавающей точкой, которые несовместимы с типом данных decimal
. Тем не менее переменной типа decimal
можно присвоить целое значение без суффикса m
, например 10.
Рассмотрим еще один пример применения типа decimal
. В этом примере рассчитывается будущая стоимость капиталовложений с фиксированной нормой прибыли в течение ряда лет.
/*
Применить тип decimal для расчета будущей стоимости капиталовложений.
*/
using System;
class FutVal {
static void Main() {
decimal amount;
decimal rate_of_return;
int years, i;
amount = 1000.0M;
rate_of_return = 0.07M;
years = 10;
Console.WriteLine("Первоначальные капиталовложения: $" + amount);
Console.WriteLine("Норма прибыли: " + rate_of_return);
Console.WriteLine("В течение " + years + " лет");
for (i = 0; i < years; i++)
amount = amount + (amount * rate_of_return);
Console.WriteLine("Будущая стоимость равна $" + amount);
}
}
Вот как выглядит результат выполнения этой программы.
Первоначальные капиталовложения: $1000
Норма прибыли: 0.07
В течение 10 лет
Будущая стоимость равна $1967.151357289565322490000
Обратите внимание на то, что результат выполнения приведенной выше программы представлен с точностью до целого ряда десятичных разрядов, т.е. с явным избытком по сравнению с тем, что обычно требуется! Далее будет показано, как подобный результат приводится к более «привлекательному» виду.
Типы для представления чисел с плавающей точкой | Символы |