C# 整数到小数的计算失败
我正在研究一种计算转换率的方法,问题是我给访问者下订单,然后得到一个结果(像84这样的整数),但当我用另一种方法除以时,我得到了0.0 如果我使用计算器对订单进行访问,结果如下所示: 00118694362017804 但是,我必须以百分比的形式显示结果,因此我应该以某种方式将结果缩短为00,00。奇怪的是,它不是双向的,我想知道是什么问题 控制器方法:C# 整数到小数的计算失败,c#,asp.net-mvc,linq,type-conversion,equation-solving,C#,Asp.net Mvc,Linq,Type Conversion,Equation Solving,我正在研究一种计算转换率的方法,问题是我给访问者下订单,然后得到一个结果(像84这样的整数),但当我用另一种方法除以时,我得到了0.0 如果我使用计算器对订单进行访问,结果如下所示: 00118694362017804 但是,我必须以百分比的形式显示结果,因此我应该以某种方式将结果缩短为00,00。奇怪的是,它不是双向的,我想知道是什么问题 控制器方法: public List<GC_ConversionRateModel> GetConversionReport(GAStatis
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;
}
public class GAVisitorsModel : IGAVisitorsModel
{
public string Date { get; set; }
public int Visitors { get; set; }
public GAVisitorsModel(string _date, string _visitors)
{
Date = _date;
Visitors = _visitors;
}
}
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;
}
}
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;
}
}
GCOrdersModel:
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;
}
public class GAVisitorsModel : IGAVisitorsModel
{
public string Date { get; set; }
public int Visitors { get; set; }
public GAVisitorsModel(string _date, string _visitors)
{
Date = _date;
Visitors = _visitors;
}
}
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;
}
}
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;
}
}
GC\U转换率模型:
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;
}
public class GAVisitorsModel : IGAVisitorsModel
{
public string Date { get; set; }
public int Visitors { get; set; }
public GAVisitorsModel(string _date, string _visitors)
{
Date = _date;
Visitors = _visitors;
}
}
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;
}
}
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您正在将一个int除以一个int,这将导致一个int-这意味着您确实失去了大部分精度。您想进行浮点/双除法运算,所以将变量转换为浮点/双除法
select new GC_ConversionRateModel(o.Date, (float)v.Visitors / (float)o.TotalOrders)).FirstOrDefault());
你将一个整数除以一个整数,这将导致一个整数-这意味着你会失去大部分精度。您想进行浮点/双除法运算,所以将变量转换为浮点/双除法
select new GC_ConversionRateModel(o.Date, (float)v.Visitors / (float)o.TotalOrders)).FirstOrDefault());
如果将
int
除以int
,结果将是int
试一试
如果将
int
除以int
,结果将是int
试一试
您的问题是,操作的结果是一个整数
,因此值被截断
例如:
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;
您的问题是,操作的结果是一个整数
,因此值被截断
例如:
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;
一次又一次地问同一个问题…可能重复或相同的问题一次又一次…可能重复或