0
我想寫一個'十進制'的擴展方法,計算給定數字相對於給定的較低和較高範圍的值。我知道這聽起來有點奇怪,所以這裏是一個具體的例子。C#擴展方法來計算範圍之間的位置
比方說,有一個工資等級制度在辦公場所的特定地點和工資標準類別如下..
- CAT1(0 - 20小時)= $ 20 /小時
- CAT2(20 - 30小時)= $第22 /小時
- 的Cat3(30 - 40小時)= $ 24 /小時
- 3,4,5(40 - 50小時)= $ 26 /小時
- 五類(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
感謝。
你需要做的第一件事就是要更加rigerous指定的範圍。看起來他們應該是半開放的時間間隔,但是就目前而言(例如)30小時的數字出現在* 2 *行中。因此,如果我工作30小時,我能獲得24美元/小時還是22美元/小時? – 2013-05-02 06:39:13
@MthetheWWatson嗨,範圍由第三方指定,但您的問題的答案是他們會收到(20 * 20)+(10 * 22)。 – Grant 2013-05-02 06:45:13