Tipo Unit
Para simplificar o trabalho com operações aritméticas sobre valores como percentagens e valores absolutos, pode usar o tipo de dados Unit. Permite operações transparentes de adição, subtração, multiplicação e divisão. Unit pode ser convertido para Decimal (exceto quando o valor é uma percentagem, isto é, quando o tipo Unit.Type está definido como UnitTypes.Percent) e de volta (neste caso, é sempre criado um valor com valor absoluto, isto é, o tipo Unit.Type fica definido como UnitTypes.Absolute).
Usar Unit
Pode criar um Unit usando construtores especiais ou usar uma notação mais curta com a ajuda de UnitHelper:
// criar um valor absoluto var absolute = new Unit(30); // criar um valor percentual var percent = 30.0.Percents();Unit tem saída formatada. Portanto, a conversão de valores para uma string depende do tipo UnitTypes:
Console.WriteLine("absolute = " + absolute); Console.WriteLine("percent = " + percent);produzirá as seguintes linhas:
absolute = 30 percent = 30%As operações aritméticas sobre Unit são executadas da mesma forma que sobre números normais:
// adição de valores Console.WriteLine("absolute + percent = " + (absolute + percent)); // multiplicação de valores Console.WriteLine("absolute * percent = " + (absolute * percent)); // subtração de valores Console.WriteLine("absolute - percent = " + (absolute - percent)); // divisão de valores Console.WriteLine("absolute / percent = " + (absolute / percent));O resultado das operações aritméticas sobre Unit torna-se ele próprio um Unit, cujo tipo é igual ao tipo do primeiro operando. Por exemplo, se adicionar um valor absoluto e uma percentagem, o resultado estará num valor absoluto:
// adição de valor absoluto e percentagem var resultAbsolutePercents = absolute + percent; // e conversão de valor absoluto para decimal var resultAbsolutePercentsDecimal = (decimal)resultAbsolutePercents; Console.WriteLine("absolute + percent = " + resultAbsolutePercents); Console.WriteLine("(decimal)(absolute + percent) = " + resultAbsolutePercentsDecimal);A saída dessas operações será a seguinte:
absolute + percent = 39 (decimal)(absolute + percent) = 39Também pode usar operadores de comparação familiares para comparar valores:
if (absolute > percent) Console.WriteLine("O valor absoluto é maior que o percentual"); if (absolute == percent) Console.WriteLine("Os valores são iguais");Para tornar um valor positivo, pode usar o método
Abs():var negative = new Unit(-10); var positive = negative.Abs(); // 10Para multiplicar um valor por um fator específico, pode usar o método
Times():var multiplied = absolute.Times(5); // 150
Limitações
- Valores do tipo UnitTypes.Percent não podem ser convertidos para outros tipos
- Valores do tipo UnitTypes.Limit não podem ser usados em operações aritméticas
- A comparação entre valores de tipos diferentes nem sempre é possível
O tipo Unit fornece uma forma consistente de trabalhar com vários tipos de valores em aplicações de negociação, facilitando a expressão de cálculos relacionados com preço e volume.