Тип Unit
Для упрощения работы с арифметическими операциями над такими величинами как проценты и абсолютные значения можно использовать тип данных Unit. Он позволяет прозрачно оперировать с операциями сложения, вычитания, умножения и деления. Unit можно конвертировать в Decimal (невозможно только если величина является процентной, то есть тип Unit.Type установлен в UnitTypes.Percent) и обратно (в этом случае всегда создается величина с абсолютным значением, то есть тип Unit.Type установлен в UnitTypes.Absolute).
Использование Unit
Создавать Unit можно через специальные конструкторы или использовать более короткую запись с помощью UnitHelper:
// создание абсолютного значения var absolute = new Unit(30); // создание процентного значения var percent = 30.0.Percents();
Unit имеет форматированный вывод. Поэтому приведение значений к строке в зависимости от типа UnitTypes:
Console.WriteLine("absolute = " + absolute); Console.WriteLine("percent = " + percent);
будет выводить следующие строчки:
absolute = 30 percent = 30%
Арифметические операции над Unit осуществляются так же, как и над обычными числами:
// сложение величин Console.WriteLine("absolute + percent = " + (absolute + percent)); // умножение величин Console.WriteLine("absolute * percent = " + (absolute * percent)); // вычитание величин Console.WriteLine("absolute - percent = " + (absolute - percent)); // деление величин Console.WriteLine("absolute / percent = " + (absolute / percent));
Результатом арифметических операций Unit становится сам Unit, тип которого равен типу первого операнда. Например, если сложить абсолютное значение и проценты, то результат будет в абсолютном значении:
// сложение абсолютного значения и процентов var resultAbsolutePercents = absolute + percent; // и приведением из абсолютного значения в decimal var resultAbsolutePercentsDecimal = (decimal)resultAbsolutePercents; Console.WriteLine("absolute + percent = " + resultAbsolutePercents); Console.WriteLine("(decimal)(absolute + percent) = " + resultAbsolutePercentsDecimal);
Вывод таких операций будет следующим:
absolute + percent = 39 (decimal)(absolute + percent) = 39
Для сравнения значений также можно использовать привычные операторы сравнения:
if (absolute > percent) Console.WriteLine("Абсолютное значение больше процентного"); if (absolute == percent) Console.WriteLine("Значения равны");
Чтобы сделать значение положительным, можно использовать метод
Abs()
:var negative = new Unit(-10); var positive = negative.Abs(); // 10
Для умножения значения на определенный коэффициент можно использовать метод
Times()
:var multiplied = absolute.Times(5); // 150
Ограничения
- Значения типа UnitTypes.Percent нельзя преобразовать в другие типы
- Значения типа UnitTypes.Limit нельзя использовать в арифметических операциях
- Сравнение между значениями разных типов не всегда возможно
Тип Unit предоставляет последовательный способ работы с различными видами значений в торговых приложениях, что упрощает выражение расчетов, связанных с ценой и объемом.