首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算范围间位置的C#延拓法

计算范围间位置的C#延拓法
EN

Stack Overflow用户
提问于 2013-05-02 06:36:01
回答 1查看 173关注 0票数 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)

以此类推。

我放在一起的扩展方法看起来是这样的,它的目的是返回一个十进制,它告诉我它是否属于给定的范围。如果是的话它会告诉我多少钱。如果没有,则返回该范围的零或最大值。老实说,这似乎是不对的。

有人能证实这是正确的逻辑吗?也许还有人可以对其进行优化?

代码语言:javascript
复制
public static decimal ValueBetween(this decimal m, decimal lower, decimal upper = decimal.MaxValue)
{
    return (m > lower)
        ? (m > upper)
            ? upper - lower
            : m - lower
        : 0m;
}

具有预期输出的示例用法

代码语言:javascript
复制
((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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-02 06:48:04

我认为你所拥有的是好的,但也许你可以让它更容易读懂:

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16331822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档