How to affect something to a variable each day C# asp.net
我有一个数据库,里面有一些价格。例如,我有牛奶=1欧元。我希望价格不要修改超过或少于10%。因此,在这种情况下,您只能将价格设置在0.90或1.10之间。很容易做到这一点,但是,当价格被修改时,用户可以在之后再次修改它。(如果他将其设置为0.9,那么他可以将其设置在0.81和0.99之间,依此类推…)因此我想以一个变量影响价格,例如每天上午9点,因此在一天之内,价格变化不能超过或低于10%。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | DataClassesDataContext db = new DataClassesDataContext(); List<ARTICLE> article = db.ARTICLE.ToList(); for (int i = 0; i < article.Count; i++) { switch (article[i].Name) { case"Milk": if (decimal.Parse(Milk.Text, CultureInfo.InvariantCulture) <= (article[i].Price/ 10) * 11 && decimal.Parse(Milk.Text, CultureInfo.InvariantCulture) >= (article[i].Price/ 10) * 9) { if (decimal.Parse(Milk.Text, CultureInfo.InvariantCulture) != article[i].Price) { article[i].Price= decimal.Parse(Milk.Text, CultureInfo.InvariantCulture); } } break; case"Other thing": //... etc } } |
所以你想:
- 每天节约起始价
- 允许用户在n%的阈值内更改当天的价格
- 允许用户一天多次更改价格(修正修正,或在总差额小于n%的情况下增加或减少价格)
然后,在更改每日价格后,检查其与基础价格的差异是否不超过n%。
为了解决这个问题,您可以使用三列:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | if (record.PriceModified.Date != DateTime.Now.Date) { // First edit for today. if (PriceWithinChangeThreshold(formData.NewPrice, record.CurrentPrice)) { // Save the old price as the new start price for today record.DailyPrice = record.CurrentPrice; record.CurrentPrice = formData.NewPrice; record.PriceModified = DateTime.Now; } } else { // This price has already been edited today. if (PriceWithinChangeThreshold(formData.NewPrice, record.DailyPrice)) { // But it's within the threshold for today record.CurrentPrice = formData.NewPrice; record.PriceModified = DateTime.Now; } } |
但正如评论中所讨论的,将价格保存为小数列通常是一个坏主意。想想(历史的)报告,发票,税收,货币和其他什么:一个"产品价格"远远超过一个数字。所以我建议把你们的价格以一种完全不同的方式储存起来。见MJWLS的答案。
一种可能的解决方案是添加一个
然后,每当您节省一个价格时,您都会检查新价格是否有效,并且(如果是)将一个记录添加到
支票内容如下:
1 2 3 4 | SELECT TOP 1 MostRecentPrice FROM PriceHistory WHERE Item = 'Milk' and PriceDateTime < 'Today's Date (with midnight as the time)' ORDER BY PriceDateTime DESC |
然后核实你省下的新价格在
它的另一个优点是,它不仅能解决您当前的问题,而且能为您提供宝贵的信息。"3周前牛奶的价格是多少?"那种事。
此外,您可以合理地简单地更改验证规则-例如,您可以说"每天10%或每周20%没有价格变化"-如果不存储完整的历史记录,您就无法轻松做到这一点。
您可以保存上次修改日期时间,并可以在每次更改时对其进行验证。
在表中创建类似"lastmodified"的列作为datetime。检查"LastModified"的日期和月份是否与今天的日期不同后,启用按钮进行修改。
它不能在应用程序本身中完成,或者您需要一些运行在服务器上的东西,您可以使用WebService或任何时候都可以查询。
如果您不能修改表,可以创建一个具有上次修改日期的本地文件,但是用户可以修改它,所以要小心。
你可以在你所有的
1 2 3 4 5 6 7 8 9 10 11 12 | class Article { DateTime LastModified { get; set; } } ... foreach(var article in articles) { var timespan = DateTime.Now - article.LastModified; if(timeSpan.TotalDays >= 1) ... } |
号