2014-06-30 21 views
1
值的總和的基礎上天

讓我們假設我有天的名單:獲得從DaysLIST

  • 太陽 - 1
  • 週一 - 2
  • 週二 - 4
  • 週三 - 8
  • 週四 - 16
  • 週五 - 32
  • 週六 - 64

現在用戶可以選擇一個或一個以上從清單。我的數據庫存儲剛剛天(例如:如果用戶選擇的太陽和MON然後值被得到存儲在數據庫3)的總和。現在我想顯示用戶他選擇的日子。計算這個的公式是什麼?

我應該寫入該二進制邏輯??

+0

如果要存儲爲二進制二進制邏輯應該與它的工作方式。但作爲@SergeyBerezovskiy說,你有什麼** **實際試過? –

回答

3

創建Flags枚舉爲工作日給他們當作一個位字段:

[Flags] 
public enum WeekDays 
{ 
    Sun = 1, 
    Mon = 2, 
    Tue = 4, 
    Wed = 8, 
    Thu = 16, 
    Fri = 32, 
    Sat = 64 
} 

然後保存到數據庫

WeekDays value = WeekDays.Sun | WeekDays.Mon; // Sun, Mon 

從數據庫使用讀HasFlag方法當以驗證是否值包含給定的週日(如果給定位域設置爲枚舉值):

WeekDays value = ReadValueFromDatabase(); 

foreach(WeekDays day in Enum.GetValues(typeof(WeekDays))) 
{ 
    if (value.HasFlag(day)) 
     // day is selected 
} 

這是同位運算的用法:

(value & day) == day 
2

試試這個:

[Flags] 
public enum Day 
{ 

    Sunday = 1, 
    Monday = 2, 
    Tuesday = 4, 
    Wednesday = 8, 
    Thursday = 16, 
    Friday = 32, 
    Saturday = 64, 
} 

Day d = Day.Friday | Day.Saturday; 

Console.WriteLine(d); 
Console.WriteLine((int)d); 

此打印: 星期五,星期六和96

或者謝爾蓋剛剛張貼在我面前有什麼...

1

創建一個程序,可以從數據庫中獲得總和的餘數

<pre> 
private int GetRemainder(int DaySum) 
{ 
    int xRemainder = 0; 

    if(DaySum > 64) 
     xRemainder = DaySum % 64; 
    else if(DaySum > 32) 
     xRemainder = DaySum % 32; 
    else if(DaySum > 16) 
     xRemainder = DaySum % 16; 
    else if(DaySum > 8) 
     xRemainder = DaySum % 8; 
    else if(DaySum > 4) 
     xRemainder = DaySum % 4; 
    else if(DaySum > 2) 
     xRemainder = DaySum % 2; 
    else if(DaySum > 1) 
     xRemainder = DaySum % 1; 

    return xRemainder; 
} 
private string SelectedDay(int SumValue) 
{ 
    if((SumValue/64) > 0) 
     return "Saturday"; 
    else if((SumValue/32) > 0) 
     return "Friday"; 
    else if((SumValue/16) > 0) 
     return "Thursday"; 
    else if((SumValue/8) > 0) 
     return "Wednesday"; 
    else if((SumValue/4) > 0) 
     return "Tuesday"; 
    else if((SumValue/2) > 0) 
     return "Monday"; 
    else if((SumValue/1) > 0) 
     return "Sunday"; 
} 
</pre> 

有變量來存儲值

<pre> 
int SumOfDaysSelected = 0; 
string DaysSelected = ""; 
</pre> 

然後創造條件,檢查選擇哪些某一天或幾天因變量的值SumOfDaysSelected

<pre> 
while(SumOfDaysSelected > 0) 
{ 
if(DaysSelected == "") 
    DaysSelected = SelectedDay(SumOfDaysSelected); 
else 
    DaysSelected = DaysSelected + "," + SelectedDay(SumOfDaysSelected); 

SumOfDaysSelected = GetRemainder(SumOfDaysSelected); 
} 
</pre>