我正在尝试从“十进制”中编写一个扩展方法,该方法计算给定数字相对于给定下限和上限范围的值。我知道这听起来有点奇怪,所以这里有一个具体的例子。
假设在特定的工作地点有一个工资等级系统,工资率类别如下..
- Cat1(0 - 20 小时)= 20 美元/小时
- Cat2(20 - 30 小时)= 22 美元/小时
- Cat3(30 - 40 小时)= 24 美元/小时
- Cat4(40 - 50 小时)= 26 美元/小时
- Cat5(50+ 小时)= 28 美元/小时
所以...
- 如果一个人在一周内工作 14 小时,他们将获得 (14 * 20)
- 如果一个人在一周内工作 27 小时,他们将获得 (20 * 20) + (7 * 22)
- 如果一个人在一周内工作 38 小时,他们将获得 (20 * 20) + (10 * 22) + (8 * 24)
等等..
我放在一起的扩展方法看起来像这样,它的目的是返回一个小数,告诉我它是否在给定的范围内。如果确实如此,它会告诉我多少。如果不是,则返回该范围的零或最大值。老实说,这似乎不太对劲。
任何人都可以验证这是正确的逻辑,或者是否有任何优化它的方法?
public static decimal ValueBetween(this decimal m, decimal lower, decimal upper = decimal.MaxValue)
{
return (m > lower)
? (m > upper)
? upper - lower
: m - lower
: 0m;
}
具有预期输出的示例用法
((decimal)14).ValueBetween(0, 20) = 14
((decimal)24).ValueBetween(0, 20) = 20
((decimal)24).ValueBetween(20, 30) = 4
((decimal)24).ValueBetween(30, 40) = 0
((decimal)150).ValueBetween(40) = 110
谢谢。