【问题标题】:Calculation int to decimal fails将 int 计算为小数失败
【发布时间】:2014-04-14 11:47:35
【问题描述】:

我正在研究一种计算转化率的方法,问题是我为访客分配订单并得到一个结果(整数,如 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;

        }

    }

谢谢

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果您将int 除以int,则结果将是int

    试试

    (double) vVisitors / o.TotalOrders;
    

    【讨论】:

      【解决方案3】:

      您的问题是 result 您的操作打算成为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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-09
        • 2015-07-11
        • 1970-01-01
        • 1970-01-01
        • 2012-10-18
        相关资源
        最近更新 更多