C# 4.0: полное руководство | страница 41



, который позволяет представить числа с точностью до 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 можно присвоить целое значение без суффикса т, например 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


Обратите внимание на то, что результат выполнения приведенной выше программы представлен с точностью до целого ряда десятичных разрядов, т.е. с явным избытком по сравнению с тем, что обычно требуется! Далее в этой главе будет показано, как подобный результат приводится к более "привлекательному" виду.