我正在研究一种计算转换率的方法,问题是我将访问者与订单分开并获得结果(整数如84)但是当我除了另一种方式时我得到0.0。
如果我通过计算器访问订单,结果看起来像这样:
0,0118694362017804
但是我必须以百分比显示结果,所以我应该以某种方式将结果缩短为00,00。不知道它的奇怪之处在于它不是双向工作而且我想知道问题是什么?
控制器方法:
public List<GC_ConversionRateModel> GetConversionReport(GAStatisticsListModel model)
{
DateTime? startDateValue = (model.StartDate == null) ? null
: (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.StartDate.Value, _dateTimeHelper.CurrentTimeZone);
DateTime? endDateValue = (model.EndDate == null) ? null
: (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.EndDate.Value, _dateTimeHelper.CurrentTimeZone).AddDays(1);
List<GAVisitorsModel> VisitorsList = GetGAStatisticsReport(model);
List<GC_OrdersModel> OrdersList = GetOrderReport(model);
List<GC_ConversionRateModel> TotalConversions = new List<GC_ConversionRateModel>();
OrdersList.ForEach(o =>
{
TotalConversions.Add((from v in VisitorsList
where v.Date == o.Date
select new GC_ConversionRateModel(o.Date, v.Visitors / o.TotalOrders)).FirstOrDefault());
});
return TotalConversions;
}
这些是对象类:
GAVisitorsModel:
public class GAVisitorsModel : IGAVisitorsModel
{
public string Date { get; set; }
public int Visitors { get; set; }
public GAVisitorsModel(string _date, string _visitors)
{
Date = _date;
Visitors = _visitors;
}
}
GCOrdersModel:
public class GC_OrdersModel
{
public string Date { get; set; }
public int TotalOrders { get; set; }
public int TotalProducts {get; set;}
public GC_OrdersModel(string _date, int _totalOrders, int _totalProducts)
{
Date = _date;
TotalOrders = _totalOrders;
TotalProducts = _totalProducts;
}
}
GC_ConversionRateModel:
public class GC_ConversionRateModel
{
public string Date { get; set; }
public decimal ConversionRate { get; set; }
public GC_ConversionRateModel(string _date, decimal _conversionRate)
{
Date = _date;
ConversionRate = _conversionRate;
}
}
THX
答案 0 :(得分:3)
您将int除以int,这会产生一个int - 这意味着您将失去大部分精度。你想做一个浮点/双除法,所以把你的变量强加给它。
select new GC_ConversionRateModel(o.Date, (float)v.Visitors / (float)o.TotalOrders)).FirstOrDefault());
答案 1 :(得分:2)
如果您将int
除以int
,结果将为int
。
尝试
(double) vVisitors / o.TotalOrders;
答案 2 :(得分:0)
您的问题是您的操作的结果 意图是integer
,因此值会被截断。
示例:
7/2 = 2; //7 is integer devided on integer 2 == integer 2;
但是如果你写的,至少有一个是decimal
,结果将由编译器推断为decimal
7/2.0 = 2; //7 is integer devided on decimal 2 == decmal 2.333;
所以在你的具体案例中你可能会这样:
var decimalResult = visitors_count/(decimal)oders_count;