2014-06-30 16 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>