Книга: C# 4.0: полное руководство

Десятичный тип данных

Десятичный тип данных

Вероятно, самым интересным среди всех числовых типов данных в 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. Дело в том, что без суффикса 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

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

Оглавление книги


Генерация: 1.418. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз