计算int到十进制失败

时间:2014-04-14 11:47:35

标签: c# asp.net-mvc linq type-conversion equation-solving

我正在研究一种计算转换率的方法,问题是我将访问者与订单分开并获得结果(整数如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

3 个答案:

答案 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;