Tipo Unit
Para simplificar el trabajo con operaciones aritméticas sobre valores como porcentajes y valores absolutos, puede usar el tipo de datos Unit. Permite operaciones transparentes de suma, resta, multiplicación y división. Unit se puede convertir a Decimal (excepto cuando el valor es un porcentaje, es decir, el tipo Unit.Type está establecido en UnitTypes.Percent) y viceversa (en este caso, siempre se crea un valor absoluto, es decir, el tipo Unit.Type se establece en UnitTypes.Absolute).
Uso de Unit
Puede crear un Unit mediante constructores especiales o usar una notación más corta con ayuda de UnitHelper:
// crear un valor absoluto var absolute = new Unit(30); // crear un valor porcentual var percent = 30.0.Percents();Unit tiene salida formateada. Por lo tanto, al convertir valores a string según el tipo UnitTypes:
Console.WriteLine("absolute = " + absolute); Console.WriteLine("percent = " + percent);se mostrarán las siguientes líneas:
absolute = 30 percent = 30%Las operaciones aritméticas sobre Unit se realizan de la misma forma que sobre números habituales:
// suma de valores Console.WriteLine("absolute + percent = " + (absolute + percent)); // multiplicación de valores Console.WriteLine("absolute * percent = " + (absolute * percent)); // resta de valores Console.WriteLine("absolute - percent = " + (absolute - percent)); // división de valores Console.WriteLine("absolute / percent = " + (absolute / percent));El resultado de operaciones aritméticas sobre Unit también es un Unit, cuyo tipo es igual al tipo del primer operando. Por ejemplo, si suma un valor absoluto y un porcentaje, el resultado estará en valor absoluto:
// suma de valor absoluto y porcentaje var resultAbsolutePercents = absolute + percent; // y conversión de valor absoluto a decimal var resultAbsolutePercentsDecimal = (decimal)resultAbsolutePercents; Console.WriteLine("absolute + percent = " + resultAbsolutePercents); Console.WriteLine("(decimal)(absolute + percent) = " + resultAbsolutePercentsDecimal);La salida de estas operaciones será la siguiente:
absolute + percent = 39 (decimal)(absolute + percent) = 39También puede usar operadores de comparación habituales para comparar valores:
if (absolute > percent) Console.WriteLine("El valor absoluto es mayor que el porcentaje"); if (absolute == percent) Console.WriteLine("Los valores son iguales");Para convertir un valor en positivo, puede usar el método
Abs():var negative = new Unit(-10); var positive = negative.Abs(); // 10Para multiplicar un valor por un factor específico, puede usar el método
Times():var multiplied = absolute.Times(5); // 150
Limitaciones
- Los valores de tipo UnitTypes.Percent no se pueden convertir a otros tipos
- Los valores de tipo UnitTypes.Limit no se pueden usar en operaciones aritméticas
- La comparación entre valores de tipos distintos no siempre es posible
El tipo Unit proporciona una forma coherente de trabajar con varios tipos de valores en aplicaciones de trading, lo que facilita expresar cálculos relacionados con precio y volumen.