我正在为产品写一个小型投票,每个用户可以为其每个属性(如:清洁和整洁,服务,位置,工作人员)提供5分(可能会增加)的轮询。每个分数都有一个形容词(1:最差,2:差,3:好,4:非常好,5:非凡)。小轮询机制的最佳算法是什么?
例如用户可以轮询到这样的产品中的一种: 清洁度和整洁:4(非常好) 服务:3(良好) 位置:1(最差) 人员:5(特别)
这个分数的平均值将是产品的分数,它将是十进制的,在这个例子中它是3.25。
现在,我想通过此结果(3.25)为产品提供一个形容词,如果它的点是在3.25的一半以下,则向下滚动(对于此3),并且如果它的点等于并高于一半像3.7,它轮到(4)
我想知道什么是最好的算法呢?
我班组长的设计是象下面这样:
public class Product
{}
public Class Poll
{
public int Id {get; set;}
public int ProductId {get; set;}
public Product Product {get; set;}
public decimal Score {get; set}
public string Adjective {get; set;}
public ICollection<PollAttributes> Attributes {get; set;}
}
public class Attribute // for the attribute like Services
{
public int Id {get; set;}
public string Title {get; set;}
public ICollection<PollAttributes> Attributes {get; set;}
}
public Class PollAttributes
{
public decimal score {get; set;}
public int AttributeId {get; set;}
public Attribute{get; set;}
public int PollId {get; set;}
public Poll Poll {get; set;}
}
还要记住.NET的“奇怪”默认舍入行为:银行家四舍五入。它可能并不总是给你你期望的答案。所以我强烈推荐使用: 'Math.round(score,MidpointRounding.AwayFromZero)' ,因为它会给你四舍五入你所期望的。 – daf