0

我正在尝试从“十进制”中编写一个扩展方法,该方法计算给定数字相对于给定下限和上限范围的值。我知道这听起来有点奇怪,所以这里有一个具体的例子。

假设在特定的工作地点有一个工资等级系统,工资率类别如下..

  • 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

谢谢。

4

1 回答 1

1

我认为你所拥有的很好,除非你可以让它更具可读性:

public static decimal ValueBetween(this decimal m, decimal lower, decimal upper = decimal.MaxValue)
{
    if (m < lower) return 0M;
    if (m > upper) return upper - lower;
    return m - lower;
}
于 2013-05-02T06:48:04.590 回答