C# 根据DaysLIST中的值之和获取天数

C# 根据DaysLIST中的值之和获取天数,c#,math,C#,Math,假设我有一个天数列表: 太阳-1 星期一至二 星期二-4 星期三-8 星期四至十六 星期五-32 Sat-64 现在用户可以从清单中选择一个或多个。我的数据库只存储天数的总和(例如:如果用户选择了sun和mon,则数据库中存储的值为3)。现在我想显示用户选择的天数。计算这个的公式是什么 我是否应该为此编写一个二进制逻辑???为周创建枚举,将其视为位字段: [Flags] public enum WeekDays { Sun = 1, Mon = 2, Tue = 4,

假设我有一个天数列表:

  • 太阳-1
  • 星期一至二
  • 星期二-4
  • 星期三-8
  • 星期四至十六
  • 星期五-32
  • Sat-64
现在用户可以从清单中选择一个或多个。我的数据库只存储天数的总和(例如:如果用户选择了sun和mon,则数据库中存储的值为3)。现在我想显示用户选择的天数。计算这个的公式是什么

我是否应该为此编写一个二进制逻辑???

为周创建枚举,将其视为位字段:

[Flags]
public enum WeekDays
{
   Sun = 1,
   Mon = 2,
   Tue = 4,
   Wed = 8,
   Thu = 16,
   Fri = 32,
   Sat = 64
}
<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>
while(SumOfDaysSelected > 0)
{
if(DaysSelected == "")
    DaysSelected = SelectedDay(SumOfDaysSelected);
else
    DaysSelected = DaysSelected + "," + SelectedDay(SumOfDaysSelected);

SumOfDaysSelected = GetRemainder(SumOfDaysSelected);
}
</pre>
然后保存到数据库

WeekDays value = WeekDays.Sun | WeekDays.Mon; // Sun, Mon
从数据库读取数据时,使用方法验证值是否包含给定的星期天(如果在枚举值中设置了给定的位字段):

这与按位操作的用法相同:

(value & day) == day
创建周天数的枚举以将其视为位字段:

[Flags]
public enum WeekDays
{
   Sun = 1,
   Mon = 2,
   Tue = 4,
   Wed = 8,
   Thu = 16,
   Fri = 32,
   Sat = 64
}
<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>
while(SumOfDaysSelected > 0)
{
if(DaysSelected == "")
    DaysSelected = SelectedDay(SumOfDaysSelected);
else
    DaysSelected = DaysSelected + "," + SelectedDay(SumOfDaysSelected);

SumOfDaysSelected = GetRemainder(SumOfDaysSelected);
}
</pre>
然后保存到数据库

WeekDays value = WeekDays.Sun | WeekDays.Mon; // Sun, Mon
从数据库读取数据时,使用方法验证值是否包含给定的星期天(如果在枚举值中设置了给定的位字段):

这与按位操作的用法相同:

(value & day) == day
试试这个:

[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);
这张照片是: 星期五、星期六和星期六

或者谢尔盖刚刚在我面前发布的内容…

试试这个:

[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);
这张照片是: 星期五、星期六和星期六


或者Sergey刚才在我面前发布的内容…

创建一个过程,该过程将从数据库或不从数据库中获取剩余金额


私有整数GetRequires(整数日和)
{
int x余数=0;
如果(日和>64)
xrements=日和%64;
否则,如果(日和>32)
X剩余=日和%32;
否则,如果(日和>16)
X剩余=日和%16;
否则,如果(日和>8)
X剩余=日和%8;
否则,如果(日和>4)
X剩余=日和%4;
否则,如果(日和>2)
X剩余=日和%2;
否则,如果(日和>1)
xrements=日和%1;
返回剩余部分;
}
私有字符串SelectedDay(int-SumValue)
{
如果((SumValue/64)>0)
返回“星期六”;
如果((SumValue/32)>0,则为else
返回“星期五”;
如果((SumValue/16)>0,则为else
返回“星期四”;
如果((SumValue/8)>0,则为else
返回“星期三”;
如果((SumValue/4)>0,则为else
返回“星期二”;
如果((SumValue/2)>0,则为else
返回“星期一”;
如果((SumValue/1)>0,则为else
返回“星期日”;
}
使用变量来存储值


int SUMOOFDAYSELECTED=0;
字符串DaysSelected=“”;
然后创建条件,根据变量SumOfDaysSelected的值检查选择的日期


而(选择的SumofDays>0)
{
如果(所选日期==“”)
DaysSelected=SelectedDay(SumOfDaysSelected);
其他的
DaysSelected=DaysSelected+,“+SelectedDay(SumOfDaysSelected);
SumOfDaysSelected=获取剩余(SumOfDaysSelected);
}

创建一个过程,该过程将从数据库中或不从数据库中获取总和的剩余部分


私有整数GetRequires(整数日和)
{
int x余数=0;
如果(日和>64)
xrements=日和%64;
否则,如果(日和>32)
X剩余=日和%32;
否则,如果(日和>16)
X剩余=日和%16;
否则,如果(日和>8)
X剩余=日和%8;
否则,如果(日和>4)
X剩余=日和%4;
否则,如果(日和>2)
X剩余=日和%2;
否则,如果(日和>1)
xrements=日和%1;
返回剩余部分;
}
私有字符串SelectedDay(int-SumValue)
{
如果((SumValue/64)>0)
返回“星期六”;
如果((SumValue/32)>0,则为else
返回“星期五”;
如果((SumValue/16)>0,则为else
返回“星期四”;
如果((SumValue/8)>0,则为else
返回“星期三”;
如果((SumValue/4)>0,则为else
返回“星期二”;
如果((SumValue/2)>0,则为else
返回“星期一”;
如果((SumValue/1)>0,则为else
返回“星期日”;
}
使用变量来存储值


int SUMOOFDAYSELECTED=0;
字符串DaysSelected=“”;
然后创建条件,根据变量SumOfDaysSelected的值检查选择的日期


而(选择的SumofDays>0)
{
如果(所选日期==“”)
DaysSelected=SelectedDay(SumOfDaysSelected);
其他的
DaysSelected=DaysSelected+,“+SelectedDay(SumOfDaysSelected);
SumOfDaysSelected=获取剩余(SumOfDaysSelected);
}

如果存储为二进制,则二进制逻辑应该是处理它的方法。但是正如@SergeyBerezovskiy所说的,您实际尝试了什么?如果您是以二进制存储,那么二进制逻辑应该是处理它的方法。但正如@SergeyBerezovskiy所说的,你到底尝试了什么?