单位类型
为了简化对百分比和绝对值等数值进行算术操作的工作,你可以使用 Unit 数据类型。它允许透明地进行加法、减法、乘法和除法操作。Unit 可以转换为 Decimal(除了当值为百分比时,i.e,类型 Unit.Type 被设置为 UnitTypes.Percent)并且可以转换回去(在这种情况下,总是会创建一个绝对值,i.e,类型 Unit.Type 被设置为 UnitTypes.Absolute)。
使用单元
你可以使用特殊构造函数创建一个 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 类型提供了一种在交易应用中处理各种数值的一致方法,使表达与价格和交易量相关的计算更加容易。