選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
1 分鐘閱讀時間 (130 個字)

從【一例一休】牽拖以0.5小時為最小請假單位的作法

unsplash-office020
勞動部在105年12月通過一例一休之後,開始了國內各公司HR與MIS不眠不休的制度與系統調整。以勞基法的規定,滿週年後才給假,且給假天數都是整數,所以不會有依比例的問題。但由於之前公司是採用曆年制,為配合勞基法未來修法方向,明年也將調整為週年制,在制度轉換的過渡期則是以105/12/31計算員工在公司的整數年年資,以勞基法新級距所對照出來的休假天數,再依到職週年日佔全年日期的比例計算。不過,公司的給假的規定是一天8小時,休假最小單位是0.5小時,所以計算出來的休假時數還要再判斷:未滿0.5小時以0.5小時計,超過0.5小時未滿1小時以1小時計。

今天要來牽拖的就是這最後一個規則:未滿0.5小時以0.5小時計,超過0.5小時未滿1小時以1小時計



如下圖。

leavehours

直覺的想法是將計算出來的原始時數(OriginalHours)拆成整數X和小數Y

leavehours_code

不過這樣看起來有點麻煩(循環複雜度至少3),是否有比較簡單的作法可以不用這麼多判斷?
其實,換個角度想,如果我們把每天8小時以0.5小時為單位,總共可以切成16個單位,接下來就是只要是落在單位與單位之間的時數無條件進位到下一個單位。
所以原來的寫法可以改成:無條件進位(OriginalHours*2)/2也就是先把計算出來的時數*2之後無條件進位到整數,再除以2。
拆成3個步驟來解釋
1. OriginalHours*2 因為每0.5小時為一個單位,所以先乘以2。
2. 將上述的結果採無條件進位到整數。
3. 將上一步驟的結果再除以2,由於上一步驟已進位到整數,所以除以2之後只會得到或0.5的結果

這兩種作法有什麼差別?就交給大家去體會了~

PS:在Excel中可以用Roundup(OriginalHours,0),在SQL中可以用 Ceiling(OriginalHours)
Model Validation:進階應用的遠端 API 驗證(Remote validation)
[Tool]利用 Microsoft Monitoring Agent 來找出系統效能及異常問題

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2024/05/03, 週五

Captcha 圖像