Главная arrow Язык программирования C# arrow C# Полное руководство Герберт Шилдт arrow Десятичный тип данных C# Полное руководство Герберт Шилдт

Десятичный тип данных C# Полное руководство Герберт Шилдт

Вероятно, самым интересным среди всех числовых типов данных в C# является тип decimal, который предназначен для применения в финансовых расчетах. Этот тип имеет разрядность 128 бит для представления числовых значений в пределах от 1Е-28 до 7,9Е+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 эти значения интерпретировались бы как стандартные константы с плавающей точкой, которые несовместимы с типом данных 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
Обратите внимание на то, что результат выполнения приведенной выше программы представлен с точностью до целого ряда десятичных разрядов, т.е. с явным избытком по сравнению с тем, что обычно требуется! Далее в этой главе будет показано, как подобный результат приводится к более подходящему виду.