2014-04-14 59 views
0

我工作的方法计算转换率,问题是我分配访客与订单,并得到一个结果(整数如84),但当我分开反过来我得到0.0。计算诠释为十进制失败

如果我devide订单用计算器访问的结果看起来是这样的:

0,0118694362017804

但是我不得不结果显示为百分比,所以我应该缩短结果00,00不知何故。 Annyways它的奇怪它dosn't工作两种方式,我想知道什么问题?

控制器的方法:

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

同样的问题一遍又一遍...... –

+0

可能的重复的[C#:除以100](http://stackoverflow.com/questions/5242436/c-divide-an-int-by-100)或[ C#:int划分不带小数](http://stackoverflow.com/questions/11568986/c-sharp-int-division-without-decimals)或[C#:Division返回零](http:// stackoverflow。com/questions/9288904/division-returns-zero) –

回答

3

你被一个int,这将导致一个int将一个int - 这意味着你失去大部分的精度。你想做一个浮动/双重除法,所以把你的变量转换成这个。

select new GC_ConversionRateModel(o.Date, (float)v.Visitors/(float)o.TotalOrders)).FirstOrDefault()); 
+0

当然,我应该知道啊,对不起。谢谢 – koffe14

2

如果通过int划分的int,其结果将是一个int

尝试

(double) vVisitors/o.TotalOrders; 
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;